配置单元从动态位置加载外部表(分区)

omjgkv6w  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(352)

我需要创建一个配置单元表(外部)来加载另一个进程生成的数据。我需要按日期进行分区,但问题是,路径中有一个随机字符串。
输入路径示例:

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

这里目录中的第四个字段是动态的(这是无法猜测的)。每个目录都有多个.gz文件
创建表时,我将给出什么位置?

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

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

p5fdfcr1

p5fdfcr11#

由于您没有使用分区约定,因此必须手动添加每个分区。
table的位置无关紧要,但为了清楚起见,还是保持原样吧。
我建议使用 date 分区的类型或至少是iso格式, YYYY-MM-DD .
我不会用 date 作为列名(nor int , string 等等)。

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';

相关问题