从Azure HDInsights中的分区镶木地板文件创建配置单元外部表

chh*_*yal 7 hive azure hdinsight parquet

我将数据保存为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';
Run Code Online (Sandbox Code Playgroud)

这会创建表,但在查询时没有行.我尝试了相同的创建语句没有PARTITIONED BY子句,这似乎工作.所以看起来问题就是分区.

我错过了什么?

Dav*_*itz 9

创建分区表后,运行以下命令以将目录添加为分区

MSCK REPAIR TABLE table_name;
Run Code Online (Sandbox Code Playgroud)

如果您有大量分区,则可能需要设置hive.msck.repair.batch.size

当存在大量未跟踪的分区时,可以批量运行MSCK REPAIR TABLE以避免OOME(内存不足错误).通过为属性hive.msck.repair.batch.size提供配置的批处理大小,它可以在内部批处理运行.该属性的默认值为零,这意味着它将立即执行所有分区.

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)


由OP撰写:

这可能会解决您的问题,但是如果数据非常大,它将无法正常工作.在此查看相关问题.

作为一种解决方法,还有另一种方法可以逐个向Hive Metastore添加分区,如:

alter table table_name add partition(year=2016, month=10, day=11, hour=11)

我们编写了简单的脚本来自动化这个alter语句,它现在似乎有效.