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



我将数据作为镶木地板文件保存在 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)

我们编写了简单的脚本来自动化此更改语句,它现在似乎可以工作。

相关内容

  • 没有找到相关文章

最新更新