如何在Hive上对非分区表进行分区?

时间:2015-08-06 16:25:03

标签: sql hive cloudera cloudera-cdh impala

鉴于一个包含360天数据的表,我们希望按日期对其进行分区以提高性能。我们是否需要对每个日期使用以下SELECT命令?有没有更有效的方法呢?

INSERT INTO TABLE <new_table> Partition (dt='2015-07-01')
SELECT * from <table> WHERE dt='2015-07-01'

2 个答案:

答案 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;