Hive 0.13外部表动态分区自定义模式

时间:2014-06-18 15:31:13

标签: hive partition hcatalog

根据文档,您应该能够为分区指定自定义模式 Hive external tables partitions。但是,我无法让它工作:     select * from rawlog_test7 limit 10;不返回任何记录。

这就是我正在做的事情

set hcat.dynamic.partitioning.custom.pattern="${year}/${month}/${day}/${hour}"

我创建了我的表 ......

partitioned by (year int, month int, day int, hour int)

location '/history.eu1/ed_reports/hourly/';

我的目录结构是../2014/06/18/13/ ...

如果我使用静态分区

   alter table rawlog_test7 add partition (year=2014,month=6,day=18,hour=13) location '/history.eu1/ed_reports/hourly/2014/06/18/13';

它有效(select * from rawlog_test7 limit 10;返回记录!)

1 个答案:

答案 0 :(得分:0)

也许我可以清楚一些关于Hive分区如何工作的事情:

分区有两个组件:文件系统上的目录,以及Hive的Metastore中的条目。此条目基本上只是一对(分区值,分区位置)。

创建Hive表时,它在Metastore中没有分区条目。

当您查询Hive时,它会检查Metastore中需要查询的分区,然后扫描它们。

Hive不会自动检测文件系统上的分区以添加Metastore条目。

"动态分区"指的是Hive能够在插入分区的Hive表时基于数据列在文件系统和Metastore中创建分区,即执行实际的insert into table rawlog_test7 partition(y,m,d,h) ...命令。

如果文件系统中的目录还没有Metastore条目,您可以像往常一样逐个添加它们:

alter table rawlog_test7 add partition (year=2014,month=6,day=18,hour=13) location '/history.eu1/ed_reports/hourly/2014/06/18/13';

或者你可以运行表修复:

msck repair table rawlog_test7;

虽然我没有使用自定义分区模式测试后者。