有一个"结果"包含Id和Date列的表。
创建表格结果(Id int,Date String)
行格式分隔的字段由','
终止存储为文本文件;
Id日期
11 2012-04-06
2012-05-08
13 2013-02-10
2013-05-06
15 2013-08-22
16 2014-04-01
2014-05-06
2014-06-03
2014-07-24
20 2014-08-26
如何将上述数据存储到"历史"表格通过基于上述日期列中的年份和周数来动态分区。
在历史表中,它应包含基于年份和年份的分区。一周,输出必须
历史分区
2012分区包含2个分区
2013分区包含3个分区
2014分区包含5个分区
答案 0 :(得分:3)
因为你想做动态分区我们需要这样做
- 为您的Hive会话设置以下两个属性:
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstric;
- 使用以下分区创建历史表
hive> create table Historical (Id int, Date String) partitioned by (year_part string, week_no int) row format delimited fields terminated by ',';
- 将数据加载到历史表中并从结果表中插入,以便根据日期中的年份和根据结果表中的日期动态找到的周数来在历史表中对数据进行分区。 - 确保要分区的列应该在select语句中排在最后。如果有一系列列,那么分区(col3,col4)中的顺序应该与select语句匹配。
hive> insert overwrite table Historical partition(year_part, week_no) select id, date, year(date) as year_part, WEEKOFYEAR(date) as week_no from Results;
- 现在验证正确创建的分区,填充的数据是否正确。