我有一个按年、月和日期划分的原始表。例如:
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中作为一条线?
1条答案
按热度按时间kmbjn2e31#
我最近不得不在一段时间内做这样的事情,但它要求您复制原始表的模式,或者至少使用
CREATE TABLE LIKE
但是,最重要的是,insert语句需要指定分区您也可以使用ctas函数,但使用分区表进行这些操作并不简单