【问题标题】:Delete data in external and partitioned table in hive删除 hive 外部表和分区表中的数据
【发布时间】:2018-08-30 06:37:13
【问题描述】:

我正在尝试从 hive 中的外部和分区表中删除数据。我可以删除分区:

ALTER TABLE myTable DROP PARTITION(field > 'xxxx') 要么 TRUNCATE TABLE myTable PARTITION(字段)

但 Blob 存储中的相关文件不会被删除。如何删除这些文件?

另一方面,我想删除使用任何字段作为过滤器的数据(不仅是分区字段)。可以在我的情况下(在外部和分区表中)完成吗?我试图通过以下方式实现这一目标:

插入覆盖表 myTable 分区(字段) SELECT * FROM myTable WHERE machine = 'xxxxx'

但 SELECT 中的数据不会替换 myTable 中的数据。

【问题讨论】:

    标签: hive azure-storage


    【解决方案1】:

    如果您删除表或分区,外部表中的数据将保留。只有对表进行管理,删除表或分区时,数据才会自动删除。

    INSERT OVERWRITE TABLE myTable PARTITION(field) SELECT... 
    

    语句可以用新加载的数据替换返回数据集中存在的分区的数据。如果返回的数据集为空,则数据将保持不变。

    要删除外部表中的数据,您需要删除文件系统上的文件。

    【讨论】:

    • 所以,如果我想“删除”过滤各种字段的数据,我必须将这些字段设置为分区,对吗? ALTER TABLE myTable DROP PARTITION(field1 = 'xxxx', field2 = 'yyyy', field3 = 'zzzz')
    • @solalla 要删除外部表中的数据,您需要删除文件系统上的文件。如果你在外部表中删除分区,文件将保留
    • 要删除数据和文件,外部表可以改成这样管理:ALTER TABLE myTable SET TBLPROPERTIES('EXTERNAL'='FALSE');然后: ALTER TABLE myTable DROP PARTITION(field > 'xxxx') 最后: ALTER TABLE myTable SET TBLPROPERTIES('EXTERNAL'='TRUE');它对我有用。
    猜你喜欢
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 2023-03-19
    • 2022-07-29
    • 2018-07-11
    相关资源
    最近更新 更多