[英]How to Copy TEXT format partitioned table to ORC format Table in Hive
[英]Hive copy from partitioned table
我有一個原始表,在YEAR,MONTH和DATE分區。 例如:
col_1 col_2 col_3 YEAR MONTH DATE
a b c 2017 03 25
我想創建一個新表,它是該表的一個子集,但仍保持原始表的分區。
簡單的事情
CREATE new_table AS
SELECT *
FROM original_table
WHERE (conditions);
但是,因為原始表是如此之大,我必須通過分區遍歷此查詢。
我目前的解決方案是編寫一個shell腳本,遍歷所有分區並為每個分區運行單獨的查詢。
例:
for year in '2016' '2017'
do
for month in '01' '02' ...
do
for day in '01' '02' ...
do
hive -e "INSERT INTO new_table SELECT * FROM original_table WHERE YEAR=$year AND MONTH=$month etc."
done
done
done
但這似乎非常圓潤,效率低下。 有沒有辦法在hive中直接執行此操作?
我最近不得不做幾天這樣的事情,但它要求你復制原始表的模式,或者至少使用CREATE TABLE LIKE
但是,最重要的是,你的insert語句需要指定分區
CREATE TABLE new_table (
fields...
)
PARTITIONED BY (year STRING, month STRING, day STRING);
INSERT OVERWRITE TABLE new_table PARTITION(year, month, day)
SELECT fields... , year, month, day -- partitions must be last
FROM original_table
WHERE
year BETWEEN '2016' AND '2017'; -- add more, as necessary
您也可以使用CTAS函數,但使用分區表執行這些功能並不簡單
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.