在Hive中创建年,月和日的表分区

时间:2017-03-14 12:08:55

标签: json hive hiveql partitioning

我的数据文件夹位于以下结构中,包含2年数据(2015-2017)。

应用程序数据/ ContryName /年/月/日/ app1.json

例如:

应用程序数据/印度/ 2016/07/01 / geek.json

应用程序数据/印度/ 2016/07/02 / geek.json

应用程序数据/ US / 2016/07/01 / geek.json

现在我已经创建了一个带分区的外部表。

PARTITIONED BY (Country String, Year String, Month String, day String)

在此之后,我需要在alter table语句中添加分区。

ALTER TABLE mytable 
ADD PARTITION (country='India', year='2016',month='01', day='01') 
location 'AppData/India/2016/07/01/'

无法为每一天创建添加分区脚本,

有没有最简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

msck repair table mytable,但不是您当前的目录命名约定

演示

<强>的bash

hdfs dfs -mkdir -p /AppData/country=India/year=2016/month=07/day=01 
hdfs dfs -mkdir -p /AppData/country=India/year=2016/month=07/day=02
hdfs dfs -mkdir -p /AppData/country=US/year=2016/month=07/day=01

<强>蜂房

create table mytable (i int) 
partitioned by (country string, year string, month string, day string)
location '/AppData'
;
hive> msck repair table mytable;
OK
Partitions not in metastore:    mytable:country=India/year=2016/month=07/day=01 mytable:country=India/year=2016/month=07/day=02 mytable:country=US/year=2016/month=07/day=01
Repair: Added partition to metastore mytable:country=India/year=2016/month=07/day=01
Repair: Added partition to metastore mytable:country=India/year=2016/month=07/day=02
Repair: Added partition to metastore mytable:country=US/year=2016/month=07/day=01
hive> show partitions mytable;
OK
partition
country=India/year=2016/month=07/day=01
country=India/year=2016/month=07/day=02
country=US/year=2016/month=07/day=01