Hive从包含分区的文件创建表

时间:2015-10-01 08:07:10

标签: hadoop hive bigdata hiveql

我遇到了一种奇怪的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可以完美地工作而无需修理。

1 个答案:

答案 0 :(得分:1)

这可能与DROP TABLE删除所有表分区的元数据的情况有关。但是,CREATE TABLE不会在Metastore中重新创建此信息。因此,在发布CREATE TABLE后,Hive还不知道存在分区并且其中存在数据。 MSCK REPAIR TABLE在Metastore中重新创建此信息(或者您可以使用ALTER TABLE tbl ADD PARTITION手动执行此操作)。