2015-11-06 149 views
1

我試圖在HIVE中加載一個豬腳本的提取作爲外部表。豬封閉這樣)括號之間的每一行((元組):在HIVE中加載外部表時如何忽略括號

(1,2,3,一)
(2,4,5-,B)
(4,2,6,C)

我找不到一種方法告訴HIVE忽略那些導致第一列爲空值的括號,因爲它實際上是一個整數。

關於如何進行的任何想法?

我知道我可以在PIG中使用FLATTEN命令,但我也想知道如何直接從HIVE處理這些文件。

回答

0

無法一步完成此操作。你必須有另一個步驟,不管是在Pig中使用flatten還是使用額外的Hive INSERT INTO

在Hive中,您可以多次使用split(string field, string pattern)從外部表中讀取並創建所需的列,然後將其加載到新表中。不過,我總是傾向於將Pig輸出爲您想要的格式,除非其他人正在從此文件讀取預期數據格式的文件。這將節省昂貴的重新讀取所有數據。

+0

謝謝本。我希望我錯過了一些簡單的事情,但我想在PIG中使用扁平化應該是我的前進。我想知道爲什麼PIG首先在括號內存儲這些行.. 我會標記你的和Raj的答案爲有用的,但也許是因爲我是新的,我不能那樣做只是 –

+0

不用擔心,高興地幫助。我認爲,約定是爲了同意,然後打勾最好回答你的問題。 –

+0

不幸的是,我需要至少15點聲望才能升級。 –

0

正如Ben所說,在一個步驟中沒有辦法......但是你可以通過在配置單元中創建一個臨時表來實現。

不知道如果我使更多的表更復雜..但它爲我工作。


create external table A_TEMP (first string,second int,third int,fourth string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
LOCATION '/user/hdfs/Adata'; 

下發生 '威剛' 文件夾中的數據

create external table A (first int,second int,third int,fourth string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
LOCATION '/user/hdfs/Afinaldata'; 

現在讓我們插入數據

insert into table A 
    select cast(substr(first, 2, length(first) - 2) as int),second,third,substr(fourth, 1,length(fourth) - 1) from A_TEMP; 

我知道類型轉換將達到性能..但對於給定的情況,這是最好的我可以想出來。

+0

謝謝Raj,我會堅持拼合我猜。 –