我将数据作为镶木地板文件保存在 Azure blob 存储中。数据按年、月、日和小时进行分区,如下所示:
cont/data/year=2017/month=02/day=01/
我想使用以下 create 语句在 Hive 中创建外部表,该语句是我使用此引用编写的。
CREATE EXTERNAL TABLE table_name (uid string, title string, value string)
PARTITIONED BY (year int, month int, day int) STORED AS PARQUET
LOCATION 'wasb://cont@storage_name.blob.core.windows.net/data';
这将创建表,但在查询时没有行。我尝试了没有PARTITIONED BY
子句的相同创建语句,这似乎有效。所以看起来问题出在分区上。
我错过了什么?
创建分区表后,运行以下命令以将目录添加为分区
MSCK REPAIR TABLE table_name;
如果有大量分区,则可能需要设置hive.msck.repair.batch.size
当存在大量未跟踪的分区时,存在 预配以批量运行 MSCK 修复表,以避免 OOME(内存不足错误)。通过给予 为属性 Hive.msck.repair.batch.size 配置的批大小 它可以在内部批量运行。的默认值 属性为零,这意味着它将一次执行所有分区。
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-恢复分区(MSCKREPAIRTABLE)
由OP撰写:
这可能会解决您的问题,但是如果数据非常大,它将不起作用。请参阅此处的相关问题。
作为解决方法,还有另一种方法可以将分区逐个添加到 Hive 元存储,如下所示:
alter table table_name add partition(year=2016, month=10, day=11, hour=11)
我们编写了简单的脚本来自动化此更改语句,它现在似乎可以工作。