我遇到了一个奇怪的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、 使用加载到表完美地工作,而不需要任何维修。
1条答案
按热度按时间u5rb5r591#
这可能与drop table删除所有表分区的元数据有关。但是create table不会在metastore中重新创建此信息。所以,在发出create table之后,hive还不知道有分区,并且分区中有数据。msck repair table在metastore中重新创建此信息(也可以使用alter table tbl add partition手动创建)。