hive从动态位置加载外部表(已分区)

时间:2017-03-18 07:38:28

标签: hive hiveql external-tables

我需要创建一个hive表(外部)来加载另一个进程生成的数据。我需要按日期划分,但问题是,路径中有一个随机字符串。

示例输入路径:

/user/hadoop/output/FDQM9N4RCQ3V2ZYT/20170314/
/user/hadoop/output/FDPWMUVVBO2X74CA/20170315/
/user/hadoop/output/FDPGNC0ENA6QOF9G/20170316/
.........
.........

目录中的第4个字段是动态的(无法猜到)。每个目录都有多个.gz文件

创建表格时我会给出什么位置?

CREATE EXTERNAL TABLE user (
userId BIGINT,
type INT,
date String
)
PARTITIONED BY (date String)
LOCATION '/user/hadoop/output/';

这是对的吗?如果是这样,我如何根据日期(目录中的最后一个字段)对其进行分区?

1 个答案:

答案 0 :(得分:1)

由于您未使用分区约定,因此您必须手动添加每个分区。

  • 表格位置无关紧要,但为了清楚起见,请保持原样。
  • 我建议您使用date类型作为分区,或者至少使用ISO格式YYYY-MM-DD
  • 我不会将date用作列名(也不会intstring等。)
PARTITIONED BY (dt date) 
alter table user add if not exists partition (dt=date '2017-03-14') location '/user/hadoop/output/FDQM9N4RCQ3V2ZYT/20170314';
alter table user add if not exists partition (dt=date '2017-03-15') location '/user/hadoop/output/FDPWMUVVBO2X74CA/20170315';
alter table user add if not exists partition (dt=date '2017-03-16') location '/user/hadoop/output/FDPGNC0ENA6QOF9G/20170316';