簡體   English   中英

來自分區表的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM