【问题标题】:How to achieve "INSERT IGNORE" using PRESTO如何使用 PRESTO 实现“INSERT IGNORE”
【发布时间】:2020-02-25 14:07:22
【问题描述】:

因此,在我的 MYSQL 中,您可以在插入时使用 INSERT IGNORE 语法,而不是在插入重复行时抛出错误,而只是忽略该行

如果可能的话,我想在 Presto 中使用 Hive 数据库实现相同的目标吗?

我知道 hive 不是真正的关系数据库,因为 Presto 上的 INSERT 语句的文档非常基本

我想知道是否有一个简单的解决方法,因为我能想到的就是首先使用光标进行选择以循环遍历结果并插入

【问题讨论】:

    标签: hive insert presto


    【解决方案1】:

    在 Hive 3 之前,没有唯一约束的概念,即使在 Hive 3 中,据我所知也没有强制执行约束。

    因此 Presto Hive 连接器不强制执行任何唯一约束,因此当您插入重复的行时,您的 INSERT 查询将永远不会失败。它们将被存储为独立的数据副本。

    如果您想保持唯一性,则需要在应用程序级别进行外部处理。

    【讨论】:

    • 嗯。也许我误解了我得到的错误:查询 20191024_134009_00671_tux4k 失败:无法插入分桶 Hive 表 year_week_of_year=2012020000 的现有分区。此查询在数据不存在时第一次运行良好,但在第一次插入数据后第二次失败
    • @MarkZA 从 Presto 318 开始,Presto(正确地)允许插入到分桶表的现有分区中。请从prestosql.io/download.html下载最新版本。
    • 谢谢会这样做。只是一个问题,如果它在我执行 select 语句时两次插入相同的数据,我会得到 2 个相同的行吗?我已经厌倦了使用 OVERWRITE 语句,但 PRESTO 一直给我一个语法错误?仍然试图围绕来自传统关系数据库背景的整个 hadoop 事物展开思考
    • 你可能想要insert_existing_partitions_behavior。有关详细信息,请参阅文档任务 github.com/prestosql/presto/issues/485
    • Piotr Findeisen 你是我的英雄,谢谢。现在升级到 .204,因为它是 insert_existing_partitions_behavior 被引入的地方。将属性设置为覆盖,现在我的查询运行多次,没有错误。使用 max_memory_per_node 要求升级到 .204 有点麻烦,但是一旦完成排序,一切都很好。谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-03-22
    • 2011-11-05
    • 2012-08-19
    • 1970-01-01
    • 2010-10-07
    • 2017-02-14
    • 2018-06-23
    • 2012-09-04
    相关资源
    最近更新 更多