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;OKTime 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.txtCopying file: file:/home/alex/test/testdata.txtLoading data to table default.test_serdeOK
Time taken: 0.185 seconds2.4)hive&> select * from test_serde; OK1 alex dba2 james dbaTime 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解析器即可
請參考: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問題集