【发布时间】:2018-01-21 10:28:22
【问题描述】:
我有一个按 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
但这似乎非常迂回和低效。有没有办法直接在蜂巢中作为一条线来做到这一点?
【问题讨论】:
-
这些是外部表还是内部表?
-
您没有插入任何分区...您是否尝试过
WHERE year BETWEEN '2016' AND '2017',例如在查询中?
标签: hadoop hive hdfs partitioning