2013-01-15 44 views
2

我正在將數據從csv文件導入Hive。我的表格包含字符串和整數。然而,在我輸入文件,該整數有他們周圍的空白,所以它看起來是這樣的:將數據導入包含空白的Hive

some string,  2 ,another string , 7 , yet another string 

不幸的是我無法控制的程序提供文件的格式。

當我使用(例如)導入數據:

CREATE TABLE MYTABLE(string1 STRING, alpha INT, string2 STRING, beta INT, string3 STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 

然後,所有我得到的整數設置爲NULL。我假設這是因爲額外的空白使解析失敗。有沒有解決的辦法?

回答

3

您可以執行多階段導入。在第一階段,將所有數據保存爲STRING,第二階段使用trim()刪除空格,然後將數據保存爲INT。您還可以考慮使用Pig從原始文件中讀取數據作爲原始文本,然後將其作爲正確的數據類型寫入Hive。

編輯

你也可以這樣做一個合格,如果你可以指向你的源文件作爲外部表。

CREATE TABLE myTable(
    string1 STRING, alpha STRING, string2 STRING, beta STRING, string3 STRING 
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '\\server\path\file.csv' 

INSERT INTO myOtherTable 
SELECT string1, 
     CAST(TRIM(alpha) AS INT), 
     string2, 
     CAST(TRIM(beta) AS INT), 
     string3 
FROM myTable; 
+0

謝謝 - 我會標記爲正確的,除非有人知道在一次傳遞中做到這一點。 –

+0

如果您可以連接到源數據作爲外部表,您也可以一次處理。我會適當地編輯我的答案。 –

+0

我仍然有這種方法的問題,因爲如果您將數據類型更改爲「double」,則空白被忽略... – grundprinzip