鉴于一个包含360天数据的表,我们希望按日期对其进行分区以提高性能。我们是否需要对每个日期使用以下SELECT命令?有没有更有效的方法呢?
INSERT INTO TABLE <new_table> Partition (dt='2015-07-01')
SELECT * from <table> WHERE dt='2015-07-01'
答案 0 :(得分:1)
如果您的新表按dt(日期)分区,则应使用Dynamic Partition。您不需要指定特定分区(在本例中为date)。通过这种方式,Hive可以实现所有不同的日期,并自动生成分区。
请记住设置这些标志:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
答案 1 :(得分:1)
首先制作你的桌子:
create db.my_table(column1 int, column2 string,
-- ...
)
comment 'I like paritioned tables'
partitioned by(dt string)
location '/path/to/file';
现在您可以将数据加载到dt分区:
insert overwrite into table db.my_table partition (dt) select * from other_table;