標籤:

hive中怎麼導入帶引號的csv文件?

這邊有個項目開始用hadoop來做數據分析,我們拿到一個csv文件,每一列都是雙引號.格式如下

"cola1","colb1","colc1"

"cola2","colb2","colc2"

現在想問下,在load數據到hive裡面怎麼過濾掉這個雙引號?

-----------------------------update 20140626----------------------------

--能導成CSV的數據,真的需要用Hive嗎?導給MySQL是不是更好?

現在還在demo階段,給了一個csv文件嘗試做處理,未來肯定是sqoop去很多上游導數據。

昨天晚上實踐了下,解決方法有幾種

1),對csv文件做處理

2),hive定義inputstream,用正則表達式處理

2.1)cat /home/alex/test/testdata.txt

"1","alex","dba"

"2","james","dba"

2.2)hive&> create table test_serde(c1 string,c2 string, c3 string) ROW FORMAT SERDE org.apache.hadoop.hive.contrib.serde2.RegexSerDe WITH SERDEPROPERTIES (input.regex = "(.*)","(.*)","(.*)",output.format.string = %1$s\001%2$s\001%3$s) STORED AS TEXTFILE;

OK

Time taken: 0.09 seconds

2.3)hive&> load data local inpath /home/alex/test/testdata.txt overwrite into table test_serde; Copying data from file:/home/alex/test/testdata.txt

Copying file: file:/home/alex/test/testdata.txt

Loading data to table default.test_serde

OK

Time taken: 0.185 seconds

2.4)hive&> select * from test_serde; OK

1 alex dba

2 james dba

Time taken: 0.057 seconds, Fetched: 2 row(s)


瀉藥,這個問題果然只能先替換掉,再load了。

優美的做法看來需要增加一個關鍵字,現在有FIELDS TERMINATED BY,LINES TERMINATED BY,需要有一個FIEDLS QUOTED BY類似的東西。

PS 能導成CSV的數據,真的需要用Hive嗎?導給MySQL是不是更好?


hive&> CREATE TABLE csv1_table(a string, b string)
&> ROW FORMAT SERDE org.apache.hadoop.hive.serde2.OpenCSVSerde
&> WITH SERDEPROPERTIES (
&> "separatorChar" = ",",
&> "quoteChar" = "",
&> "escapeChar" = ""
&> )
&> STORED AS TEXTFILE;
OK
Time taken: 1.151 seconds

使用SERDE解析器即可 :D


請參考:Hive幾種數據導入方式


自己寫一個csv的serde,使用開源csv庫即可搞定。


python的話有csv模塊的,其它語言也類似吧,自己解析(例如替換)也可以,然後就變成數組的導入了


先對這個 csv 文件做處理去引號

再load 導入 hive 就可以了


如果每個列都帶雙引號,有一種變通的方法:

導入原始csv文件,映射為所有列都是string類型的表,創建視圖來處理雙引號和類型轉換。


推薦閱讀:

為何Hive中的數據不均勻分布會導致數據傾斜?
《Accessing Hadoop Data Using Hive》第三章Hive DML問題集
Hive On Spark, SparkSQL On Spark, 與Spark On YARN如何定義呢?
《Simplifying data pipelines with Apache Kafka》課程第三章Kafka Producer問題集

TAG:Hadoop | Hive |