2016-11-08 747 views
1

我正在使用配置單元處理大型120 GB文件。首先將數據從sql server表加載到aws s3作爲csv文件(tab分隔),然後在此文件的頂部創建hive外部表。從配置單元外部表查詢數據時遇到問題。我注意到csv在許多列字段中包含\ n(這在sql server中實際上是「null」)。現在,當我創建配置單元表時,出現在任何記錄中的\ n會將配置單元映射到新記錄,併爲該記錄中的其餘列生成NULL。我嘗試了由「001」終止的行,但沒有成功。我得到的錯誤是,配置單元僅支持「由\ n終止的行」。我的問題是,如果配置單元僅支持\ n作爲行分隔符,您將如何處理包含\ n值的列? 有什麼建議嗎?hive記錄中的「 n」值

這是我如何創建我的外部表:

DROP TABLE IF EXISTS IMPT_OMNITURE__Browser; 

CREATE EXTERNAL TABLE IMPT_OMNITURE__Browser ( 
    ID int, Region string, Description string 
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LOCATION 's3://abm-dw/data-import/omniture/Browser/'; 
+1

你如何創建外部表?您應該始終發佈相關代碼以及您的問題,否則我們無法真正幫助您。 – cheseaux

+0

我添加了創建外部表的查詢。謝謝 –

+0

可能的重複 - 請參閱[這個答案](https://stackoverflow.com/a/30945253/6096232) – Narvarth

回答

0

你可以改變表與下面的命令或者在TBL屬性創建語句添加屬性;

ALTER TABLE table set SERDEPROPERTIES ('serialization.null.format' = ""); 

這會使文件中的數據爲NULL。

+0

我嘗試下serde屬性,但它沒有幫助,行爲是相同的 –

+0

行格式serde'com.bizo .hive.serde.csv.CSVSerde' serdeproperties (「separatorChar」=「\ t」, 「serialization.null.format」=「」) –