我有数据保存为Parquet文件在azure blob存储。数据按年、月、日和小时进行分区,如: cont/data/year=2017/month=02/day=01/
我想使用下面的create语句在配置单元中创建外部表,这是我使用此引用编写的。
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';
这将创建表,但在查询时没有行。我尝试了同样的create语句 PARTITIONED BY
这似乎奏效了。所以看起来问题在于分区。
我错过了什么?
1条答案
按热度按时间ctrmrzij1#
创建分区表后,运行以下命令以将目录添加为分区
如果有大量分区,则可能需要设置hive.msck.repair.batch.size
当有大量未跟踪的分区时,有一个规定可以批量运行msck repair table,以避免oome(内存不足错误)。通过为属性hive.msck.repair.batch.size提供配置的批大小,它可以在批内部运行。属性的默认值是零,这意味着它将一次执行所有分区。
https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#languagemanualddl-恢复分区(msckrepairtable)
作者:op:
这可能会解决您的问题,但是如果数据非常大,它将无法工作。请参阅此处的相关问题。
作为一种解决方法,还有另一种方法可以将分区逐个添加到配置单元元存储中,如:
alter table table_name add partition(year=2016, month=10, day=11, hour=11)
我们编写了一个简单的脚本来自动执行这个alter语句,它现在似乎可以工作了。