hive - 如何使用 Presto/Trino 物理删除数据?

标签 hive presto trino

在我安装的 Presto (358) 中,我有两个可用的配置单元连接器:

  • S3
  • Azure Blob (ABFS)

一切正常,但当我调用DROP (TABLE/SCHEMA)DELETE FROM时,删除仅发生在元存储中,并且没有物理删除数据。适用于 S3 和 ABFS。

在替换数据的情况下,这会变得相当成问题:

> DROP TABLE hive.abc; 
-- ok

> CREATE TABLE hive.abc AS (...) 
-- ERROR: Target directory 'abc' already exists.

这同样适用于删除分区等。

有没有办法真正删除数据?

最佳答案

找到解决办法了。主要区别在于为架构及其表指定 external_locationlocation

CREATE SCHEMA hive.xyz WITH (location = 'abfs://...');
CREATE TABLE hive.xyz.test AS SELECT (...);

DELETE FROM hive.xyz.test WHERE TRUE;

-- Data ARE physically deleted

CREATE SCHEMA hive.xyz;
CREATE TABLE hive.xyz.test 
    WITH (external_location = 'abfs://...') 
    AS SELECT (...);

DELETE FROM hive.xyz.test WHERE TRUE;

-- Data ARE NOT physically deleted.

结论:表的 external_location 将阻止数据删除。

关于hive - 如何使用 Presto/Trino 物理删除数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68655219/

相关文章:

sql - 如何在 Hive 中分解数组并创建 View ?

hive - 在 presto 执行 hql 之前,presto 如何显示分区?

hadoop - 确认为特定 Hive 表启用了压缩

hadoop - 改变配置单元多列

hive - kibana 可以连接 Elasticsearch 以外的数据源吗?

hadoop - hive 酸更新和删除错误

sql - hive和presto,整数除法截断问题

database - 连接 Presto 和 Apache SuperSet

amazon-web-services - Presto SQL : TO_UNIXTIME