从Azure HDInsights

时间:2017-04-11 12:46:07

标签: azure hive parquet hdinsight

我将数据保存为Azure blob存储中的镶木地板文件。数据按年,月,日和小时分区,如:

cont/data/year=2017/month=02/day=01/

我想使用以下create语句在Hive中创建外部表,我使用this reference编写。

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子句的相同create语句,这似乎有效。所以看起来问题就是分区。

我错过了什么?

1 个答案:

答案 0 :(得分:6)

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

MSCK REPAIR TABLE table_name;

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

  

当有大量未跟踪的分区时,有一个   提供批量运行MSCK REPAIR TABLE以避免OOME(Out of Memory Error)。通过给予   配置的属性hive.msck.repair.batch.size的批处理大小   它可以在内部批量运行。默认值   property为零,表示它将立即执行所有分区。

     

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

由OP撰写:

这可能会解决您的问题,但是如果数据非常大,则无法解决问题。请参阅相关问题here

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

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

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