从azure hdinsights中的分区Parquet文件创建配置单元外部表

h9vpoimq  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(396)

我有数据保存为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 这似乎奏效了。所以看起来问题在于分区。
我错过了什么?

ctrmrzij

ctrmrzij1#

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

MSCK REPAIR TABLE table_name;

如果有大量分区,则可能需要设置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语句,它现在似乎可以工作了。

相关问题