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

Hologres现在主键重复写入 无法保证保留最后吗?

Hologres现在主键重复写入 无法保证保留最后吗?When there are multiple inserting data records for a primary key, 'keep_last' or 'keep_first' cannot be strictly guaranteed. (The currently guaranteed semantics is 'keep_any').
hg_experimental_affect_row_multiple_times_keep_last 这个参数已经配置了

展开
收起
真的很搞笑 2023-11-12 11:10:49 167 0
5 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    是的,根据您提供的信息,Hologres确实存在无法严格保证主键重复写入时保留最后一条记录的情况。这是因为在Hologres中,当遇到主键冲突时,默认的行为是放弃所有冲突的插入操作,并返回错误信息。如果此时有多个插入操作都涉及到了相同的主键,则只能保留其中之一,而不能确定保留哪一条记录。
    为了解决这个问题,Hologres提供了实验性的参数 hg_experimental_affect_row_multiple_times_keep_last 来控制这种行为。如果设置了这个参数,则当发生主键冲突时,Hologres将尽力保留最后一次插入的操作结果,而不是随意放弃任何一次插入操作的结果。不过需要注意的是,这个参数是一个实验性特性,可能存在一些不稳定或未知的问题,所以在使用时还需要谨慎对待。
    在实际的使用场景中,为了避免主键重复写入的问题,建议您尽可能减少一次事务中涉及主键冲突的插入操作的数量。如果无法避免这种情况,可以考虑使用其他的数据库操作或查询方式,如分页查询、批量插入等,以减少主键冲突的风险。

    2023-11-12 22:40:28
    赞同 1 展开评论 打赏
  • 根据您提供的描述,Hologres目前并不支持主键重复插入时保留最后一条记录的功能。这意味着如果您在一次事务中多次插入具有相同主键的数据记录,最终可能会只保留其中任意一条记录,而不是您期望的最后一条记录。这是一个已知的问题,当前还没有完全解决。
    为了缓解这个问题,Hologres提供了一个实验性的参数 hg_experimental_affect_row_multiple_times_keep_last,它可以控制在主键重复插入时是否尽可能保留最后一条记录。但是请注意,由于这是一个实验性参数,并未完全成熟,所以在实际使用过程中可能还存在一些问题,不能完全保证满足您的需求。
    建议您在遇到主键重复插入的问题时,尽量避免在一次事务中多次插入具有相同主键的数据记录。如果不可避免,可以考虑使用其他数据存储或查询方式,例如分页查询、批量插入等,以减少主键重复插入的可能性。同时,请关注Hologres的相关更新,以便在未来版本中获取更好的解决方案。

    2023-11-12 22:37:38
    赞同 展开评论 打赏
  • Hologres在主键重复写入时无法保证保留最后一条记录。当有多个插入数据记录具有相同的主键时,'keep_last'或'keep_first'不能严格保证。目前保证语义是'keep_any'。

    如果你想要确保保留最后一条记录,可以在插入数据之前先删除具有相同主键的旧记录。例如,你可以使用以下SQL语句:

    DELETE FROM your_table WHERE primary_key = 'your_value';
    INSERT INTO your_table (primary_key, other_columns) VALUES ('your_value', 'other_values');
    

    这样,在插入新记录之前,具有相同主键的旧记录将被删除,从而确保保留最后一条记录。

    Hologres中主键Primary Key(简称PK)与传统数据库主键特性一致,是表中记录的唯一标识,代表了表数据的唯一性。因此被设置为主键的字段是唯一的且是非空的,并且支持设置多个字段为主键。本文为您介绍Hologres中主键的使用相关内容。https://help.aliyun.com/zh/hologres/user-guide/primary-key?spm=a2c4g.11186623.0.i19

    2023-11-12 16:38:50
    赞同 展开评论 打赏
  • 是的,Hologres在主键重复写入时无法保证保留最后一条记录。当有多个插入数据记录具有相同的主键时,'keep_last'或'keep_first'不能严格保证。目前保证语义的是'keep_any'。

    如果您希望在主键重复时保留最后一条记录,可以考虑使用以下方法:

    1. 在插入数据之前检查主键是否已存在。如果主键已存在,则不执行插入操作。
    2. 使用hg_experimental_affect_row_multiple_times_keep_last参数来配置保留最后一条记录的行为。

    请注意,这些方法并不能保证在所有情况下都能保留最后一条记录,因为Hologres的设计原则是确保数据的一致性和完整性。

    2023-11-12 13:54:36
    赞同 展开评论 打赏
  • Hologres的结果表没有设置主键,这时Flink实时接入就是一种Append Only的模式进行写入。当上游数据发生重复,或者Flink任务作业失败后重启,上游数据会再次被写入到结果表中。

    2023-11-12 13:49:05
    赞同 展开评论 打赏

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

相关产品

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

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