在 Hive 中为年、月和日创建表分区
Posted
技术标签:
【中文标题】在 Hive 中为年、月和日创建表分区【英文标题】:Create table partition in Hive for year,month and day 【发布时间】:2017-03-14 12:08:55 【问题描述】:我的数据文件夹位于以下结构中,数据为 2 年(2015-2017)。
AppData/ContryName/year/month/Day/app1.json
例如:
AppData/India/2016/07/01/geek.json
AppData/India/2016/07/02/geek.json
AppData/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】:msck repair table mytable
,但不符合您当前的目录命名约定
演示
重击
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
【讨论】:
感谢您的回答,它有所帮助,但问题是我有 2015 年至 2017 年每天的数据。我无法创建像 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=India/year= 2016/月=07/天=30 hdfs dfs -mkdir -p /AppData/country=India/year=2016/month=08/day=01 ........ ..................... 任何自动创建这些子文件夹的方法? 如何使用 bash 脚本重命名文件夹或使用 bash 脚本添加分区? 并排即时将此数据移动到 S3,因此无法在那里执行 shell 脚本 :(,这就是这里的问题。 (1) 根据 google 的说法,这似乎是可能的 (2) 您不必在 S3 上执行脚本,而是在当前数据上执行并生成一批alter table ... add partition ...
命令
是否可以将这些分区查询为单个日期?还是所有查询都需要像 where day = 2 and month = 3 and year = 2016以上是关于在 Hive 中为年、月和日创建表分区的主要内容,如果未能解决你的问题,请参考以下文章