我将数据保存为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语句,这似乎有效。所以看起来问题就是分区。
我错过了什么?
答案 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为零,表示它将立即执行所有分区。
由OP撰写:
这可能会解决您的问题,但是如果数据非常大,则无法解决问题。请参阅相关问题here。
作为一种解决方法,还有另一种方法可以逐个向Hive Metastore添加分区,如:
alter table table_name add partition(year=2016, month=10, day=11, hour=11)
我们编写了简单的脚本来自动化这个alter语句,它现在似乎有效。