Tom*_*mer 18 hadoop hive date dynamic database-partitioning
我正在运行配置单元071,处理具有以下目录布局的现有数据:
-TableName
- d =(例如2011-08-01)
- d = 2011-08-02
- d = 2011-08-03
...等
在每个日期下我都有日期文件.
现在加载我正在使用的数据
CREATE EXTERNAL TABLE table_name (i int)
PARTITIONED BY (date String)
LOCATION '${hiveconf:basepath}/TableName';**
Run Code Online (Sandbox Code Playgroud)
我希望我的hive脚本能够根据一些输入日期和天数加载相关分区.所以如果我通过date ='2011-08-03'和days ='7'
脚本应加载以下分区
- d = 2011-08-03
- d = 2011-08-04
- d = 2011-08-05
- d = 2011-08-06
- d = 2011-08-07
- d = 2011-08-08
- d = 2011-08-09
除了明确地运行之外,我没有找到任何方法来做到这一点:
ALTER TABLE table_name ADD PARTITION (d='2011-08-03');
ALTER TABLE table_name ADD PARTITION (d='2011-08-04');
ALTER TABLE table_name ADD PARTITION (d='2011-08-05');
ALTER TABLE table_name ADD PARTITION (d='2011-08-06');
ALTER TABLE table_name ADD PARTITION (d='2011-08-07');
ALTER TABLE table_name ADD PARTITION (d='2011-08-08');
ALTER TABLE table_name ADD PARTITION (d='2011-08-09');
Run Code Online (Sandbox Code Playgroud)
然后运行我的查询
select count(1) from table_name;
Run Code Online (Sandbox Code Playgroud)
然而,根据输入的日期和日期,这不是自动的
有没有什么办法可以根据日期范围或日期算术来定义外部表来加载分区?
小智 0
分区是数据的物理分段 - 其中分区由目录系统维护,查询使用元数据来确定分区所在的位置。所以如果你能让目录结构与查询匹配,它应该找到你想要的数据。例如:
select count(*) from table_name where (d >= '2011-08-03) and (d <= '2011-08-09');
Run Code Online (Sandbox Code Playgroud)
但我不知道任何日期范围操作,否则,您必须先进行数学计算才能创建查询模式。
您还可以创建外部表,并向其中添加定义位置的分区。这允许您根据需要分解数据,并且仍然使用分区方案来优化查询。