我試圖在HIVE中加載一個豬腳本的提取作爲外部表。豬封閉這樣)括號之間的每一行((元組):在HIVE中加載外部表時如何忽略括號
(1,2,3,一)
(2,4,5-,B)
(4,2,6,C)
我找不到一種方法告訴HIVE忽略那些導致第一列爲空值的括號,因爲它實際上是一個整數。
關於如何進行的任何想法?
我知道我可以在PIG中使用FLATTEN命令,但我也想知道如何直接從HIVE處理這些文件。
我試圖在HIVE中加載一個豬腳本的提取作爲外部表。豬封閉這樣)括號之間的每一行((元組):在HIVE中加載外部表時如何忽略括號
(1,2,3,一)
(2,4,5-,B)
(4,2,6,C)
我找不到一種方法告訴HIVE忽略那些導致第一列爲空值的括號,因爲它實際上是一個整數。
關於如何進行的任何想法?
我知道我可以在PIG中使用FLATTEN命令,但我也想知道如何直接從HIVE處理這些文件。
無法一步完成此操作。你必須有另一個步驟,不管是在Pig中使用flatten
還是使用額外的Hive INSERT INTO
。
在Hive中,您可以多次使用split(string field, string pattern)
從外部表中讀取並創建所需的列,然後將其加載到新表中。不過,我總是傾向於將Pig輸出爲您想要的格式,除非其他人正在從此文件讀取預期數據格式的文件。這將節省昂貴的重新讀取所有數據。
正如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;
我知道類型轉換將達到性能..但對於給定的情況,這是最好的我可以想出來。
謝謝Raj,我會堅持拼合我猜。 –
謝謝本。我希望我錯過了一些簡單的事情,但我想在PIG中使用扁平化應該是我的前進。我想知道爲什麼PIG首先在括號內存儲這些行.. 我會標記你的和Raj的答案爲有用的,但也許是因爲我是新的,我不能那樣做只是 –
不用擔心,高興地幫助。我認爲,約定是爲了同意,然後打勾最好回答你的問題。 –
不幸的是,我需要至少15點聲望才能升級。 –