gpt4 book ai didi

hadoop - 从分区表复制 Hive

转载 作者:可可西里 更新时间:2023-11-01 15:03:53 26 4
gpt4 key购买 nike

我有一个按年、月和日分区的原始表。例如:

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

但这看起来非常迂回和低效。有没有办法直接在配置单元中将其作为一行来执行?

最佳答案

我最近不得不在几天的时间里做这样的事情,但它需要你复制原始表的架构,或者至少使用 CREATE TABLE LIKE

但是,最重要的是,您的插入语句需要指定分区

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 函数,但使用分区表执行这些操作并不简单

关于hadoop - 从分区表复制 Hive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48365816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com