有一个“结果”表,其中包含 ID 和日期列。
创建表结果(Id int,日期字符串)
行格式分隔字段以“,”结尾
存储为文本文件;
Id Date
11 2012-04-06
12 2012-05-08
13 2013-02-10
14 2013-05-06
15 2013-08-22
16 2014-04-01
17 2014-05-06
18 2014-06-03
19 2014-07-24
20 2014-08-26
如何通过根据上述日期列中的年份和周号进行动态分区,将上述数据存储到“历史”表中。
在历史表中,它应该包含基于年和周的分区,输出必须是
历史分区
2012分区包含2个分区
2013分区包含3个分区
2014分区包含5个分区
当你想做动态分区时,我们需要这样做
-- 为 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;
-- 现在验证正确创建的分区以及填充的数据是否正确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)