Hive从带有分区的文件创建表



我遇到了一个奇怪的HIVE行为,我不能完全理解。我真希望有人能解释一下那件事。

我使用下面的脚本来创建和添加数据到一个表:

DROP TABLE myTbl;
CREATE EXTERNAL TABLE myTbl (
    Col1 string,
    Col2 string,  
    Col3 string,
    Col4  string,
)
PARTITIONED BY (partition STRING)
LOCATION '${hiveconf:Valid_location_on_aws_s3_with_the_proper_file_to_create_table}';

Hive运行脚本返回OK,但(这是问题)表是空的。运行:select * from myTbl;不返回任何

这个问题的解决方案是相当简单的脚本后,我运行以下命令/脚本:

MSCK REPAIR TABLE myTbl

现在,当在这个表上执行select时,我可以看到文件中的所有数据。

我不明白的是为什么我需要使用修复才能看到表中的数据。

注:

这可能与DROP TABLE删除所有表分区的元数据的情况有关。但是CREATE TABLE不会在metastore中重新创建这些信息。因此,在发出CREATE TABLE命令后,Hive还不知道有分区和其中有数据。MSCK REPAIR TABLE在metastore中重新创建这些信息(或者您可以手动使用ALTER TABLE TABLE ADD PARTITION)。

最新更新