【问题标题】:mismatched input 'OVERWRITE'. Expecting: 'INTO'不匹配的输入“覆盖”。期待:'INTO'
【发布时间】:2021-10-19 10:58:03
【问题描述】:

我有一个带有架构的配置单元表

CREATE TABLE `temp_table`(
  `gpid` string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION
  'wasbs://test@test.blob.core.windows.net/warehouse/test_data';

我正在使用气流 2 向其中添加数据。每次作业运行时我都需要覆盖数据,所以我尝试使用

INSERT OVERWRITE TABLE default.temp_table
select id from sometable

但我遇到了问题

trino.exceptions.TrinoUserError: TrinoUserError(type=USER_ERROR, name=SYNTAX_ERROR, message="line 1:8: mismatched input 'OVERWRITE'. Expecting: 'INTO'", query_id=20210817_140454_00001_rbuac)

【问题讨论】:

    标签: sql hive airflow trino


    【解决方案1】:

    来自Trino Documentation

    默认情况下,INSERT 查询不允许覆盖现有数据。您可以使用目录会话属性insert_existing_partitions_behavior 来允许覆盖。使用 Hive 连接器添加目录名称,例如 hdfs,并在运行插入查询之前在会话中设置属性:

    SET SESSION hdfs.insert_existing_partitions_behavior = 'OVERWRITE';
    INSERT INTO hdfs.schema.table ...
    

    产生的行为等同于在 Hive 中使用 INSERT OVERWRITE

    当表存储在 S3、加密的 HDFS 或外部位置时,Trino 不支持插入覆盖操作。在这种情况下删除前插入。

    【讨论】:

    • 我将数据存储在 azure blob 存储上。另外我没有指定任何分区键,在这种情况下也会在上面吗?
    • @SHIVAMJINDAL 我不知道...只是制作备份表并尝试
    • 只是确认,不会影响任何全局设置
    • @SHIVAMJINDAL 对。它不会影响任何全局设置
    猜你喜欢
    • 2021-12-07
    • 2013-11-23
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2022-12-29
    • 2023-03-30
    相关资源
    最近更新 更多