1

我正在使用蜂巢工作。今天在创建一些外部表的时候,忘记输入EXTERNAL关键字,HiveQL 是这样的:

CREATE TABLE year_2012_main (
    some BIGINT,
    fields BIGINT,
    should BIGINT,
    beee BIGINT,
    here STRING,
    buttt STRING,
    Iveee STRING,
    decide STRING,
    tohide STRING,
    them BIGINT)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    COLLECTION ITEMS TERMINATED BY ' '
    MAP KEYS TERMINATED BY ':'
    STORED AS TEXTFILE location '/data/content/year_2012_main';

然后我试了一下select count (*) from year_2012_main;,效果很好。

所以,只是出于好奇,有或没有有什么区别EXTERNAL

4

1 回答 1

0

非外部的 Hive 表称为托管表。Hive 中的外部表和托管表之间的主要区别之一是,当删除外部表时,与其关联的数据(在您的情况下为 /data/content/year_2012_main)不会被删除,只有元数据(编号列数、列类型、终止符等)从 Hive 元存储中删除。当托管表被删除时,元数据和数据都会被删除。到目前为止,我一直更喜欢将表设为外部,因为如果我的 Hive 表的架构发生更改,我可以删除外部表并使用新架构在相同的 HDFS 数据上重新创建另一个外部表。然而,大多数(如果不是全部)模式的更改现在可以通过ALTER TABLE或类似的命令,因此我对使用外部表而不是托管表的建议/偏好可能比现代表更多的是遗留问题。

您可以在此处了解有关术语的更多信息。

于 2012-07-14T16:10:50.840 回答