我遇到了一种奇怪的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时,我可以看到文件中的所有数据。
我无法理解的是为什么我需要使用修复来查看表格中的数据。
P.S。使用LOAD INTO TABLE可以完美地工作而无需修理。
答案 0 :(得分:1)
这可能与DROP TABLE删除所有表分区的元数据的情况有关。但是,CREATE TABLE不会在Metastore中重新创建此信息。因此,在发布CREATE TABLE后,Hive还不知道存在分区并且其中存在数据。 MSCK REPAIR TABLE在Metastore中重新创建此信息(或者您可以使用ALTER TABLE tbl ADD PARTITION手动执行此操作)。