我遇到了一个奇怪的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)。