开发者社区 > 大数据与机器学习 > 实时数仓 Hologres > 正文

Hologres 语法不支持 多个values直接insert是嘛?

Hologres INSERT ON CONFLICT 语法不支持 多个values直接insert是嘛?这么执行主键冲突时直接报:INSERT INTO test1 (a, b, c) VALUES (1, 1, 1),(1,2,3)
ON CONFLICT (a)
DO UPDATE SET b = EXCLUDED.b, c = EXCLUDED.c,a= EXCLUDED.a;
INSERT ON CONFLICT 不支持批量更新是嘛?

展开
收起
真的很搞笑 2023-12-01 11:33:26 63 0
4 条回答
写回答
取消 提交回答
  • 是的,Hologres的INSERT ON CONFLICT语法暂时不支持多个values的直接插入。你需要为每个values执行一次INSERT ON CONFLICT语句。这是Hologres的一个限制,可能在未来版本的Hologres中得到改进。

    对于你提供的例子,你可以这样修改:

    INSERT INTO test1 (a, b, c) VALUES (1, 1, 1)
    ON CONFLICT (a)
    DO UPDATE SET b = EXCLUDED.b, c = EXCLUDED.c, a = EXCLUDED.a;
    
    INSERT INTO test1 (a, b, c) VALUES (1, 2, 3)
    ON CONFLICT (a)
    DO UPDATE SET b = EXCLUDED.b, c = EXCLUDED.c, a = EXCLUDED.a;
    

    这样,当主键冲突时,Hologres会更新对应的主键值。

    2023-12-02 15:35:52
    赞同 展开评论 打赏
  • https://help.aliyun.com/zh/hologres/user-guide/insert?spm=a2c4g.11186623.0.i117

    目前INSERT只支持以下两种数据写入方式:

    insert into values:

    INSERT INTO holo2mysqltest (cate_id, cate_name) VALUES
    (3, 'true'),
    (3, 'fale'),
    (3, 'trxxue'),
    (3, 'x'),
    (4, 'The Dinner Game');
    insert into select:

    INSERT INTO test2
    SELECT * FROM test1;

    2023-12-02 10:27:00
    赞同 展开评论 打赏
  • 在Hologres中,INSERT ON CONFLICT语法是支持批量插入和冲突处理的。您可以使用INSERT ... VALUES子句来一次性插入多个值,并且在主键冲突时使用ON CONFLICT子句执行更新。

    下面是一个示例,演示了如何在INSERT语句中一次性插入多个值并处理冲突:

    INSERT INTO test1 (a, b, c) 
    VALUES 
        (1, 1, 1),
        (2, 2, 2),
        (3, 3, 3)
    ON CONFLICT (a)
    DO UPDATE SET b = EXCLUDED.b, c = EXCLUDED.c;
    

    上述示例中,我们通过一个INSERT语句一次性插入了三行数据。如果遇到主键冲突(即a列重复),则使用ON CONFLICT子句指定的冲突解决方式进行更新。

    2023-12-02 10:02:04
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    是的,Hologres当前不支持在单个INSERT ON CONFLICT语句中插入多个VALUES。因此,你需要为每个值单独执行INSERT ON CONFLICT

    下面是一个示例,演示如何为每对值分别执行INSERT ON CONFLICT

    -- 插入第一条数据
    INSERT INTO test1 (a, b, c) VALUES (1, 1, 1)
    ON CONFLICT (a)
    DO UPDATE SET b = EXCLUDED.b, c = EXCLUDED.c;
    
    -- 插入第二条数据
    INSERT INTO test1 (a, b, c) VALUES (1, 2, 3)
    ON CONFLICT (a)
    DO UPDATE SET b = EXCLUDED.b, c = EXCLUDED.c;
    

    这种方法虽然可以避免主键冲突时直接报错,但是需要多次执行SQL语句,可能会导致性能下降。如果要处理大量数据的批量插入,你可以考虑使用其他方法,如批量导入工具或者编写自定义脚本等。

    2023-12-01 16:35:20
    赞同 展开评论 打赏

本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975

相关产品

  • 实时数仓 Hologres
  • 相关电子书

    更多
    实时数仓Workshop(广州站)- 李佳林 立即下载
    阿里云实时数仓Hologres技术揭秘2.0 立即下载
    实时数仓Hologres技术实战一本通2.0版(下) 立即下载