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子句,这似乎工作.所以看起来问题就是分区.
我错过了什么?
创建分区表后,运行以下命令以将目录添加为分区
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提供配置的批处理大小,它可以在内部批处理运行.该属性的默认值为零,这意味着它将立即执行所有分区.
由OP撰写:
这可能会解决您的问题,但是如果数据非常大,它将无法正常工作.在此查看相关问题.
作为一种解决方法,还有另一种方法可以逐个向Hive Metastore添加分区,如:
alter table table_name add partition(year=2016, month=10, day=11, hour=11)
我们编写了简单的脚本来自动化这个alter语句,它现在似乎有效.
| 归档时间: |
|
| 查看次数: |
4464 次 |
| 最近记录: |