创建没有EXTERNAL关键字的外部表?

时间:2012-07-12 07:22:08

标签: database hive

我正在使用蜂巢工作。当我今天创建一些外部表时,我忘了键入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有什么不同?

1 个答案:

答案 0 :(得分:0)

非外部的Hive表称为托管表。 Hive中的外部表和托管表之间的主要区别之一是,当删除外部表时,与其关联的数据(在您的情况下为/ data / content / year_2012_main)不会被删除,只会删除元数据(数字)列,列类型,终止符等)从Hive Metastore中删除。当托管表被删除时,元数据和数据都会被删除。到目前为止,我总是倾向于在外部创建表,因为如果我的Hive表的模式发生了变化,我可以删除外部表并使用新模式在相同的HDFS数据上重新创建另一个外部表。但是,现在大多数(如果不是全部)对模式的更改都可以通过ALTER TABLE或类似命令进行,因此我对使用外部表而不是使用外部表的建议/偏好可能比现代表更具有传统意义。

您可以详细了解术语here