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 这个参数已经配置了

「点点赞赏,手留余香」

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

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

  3. Hologres的结果表没有设置主键,这时Flink实时接入就是一种Append Only的模式进行写入。当上游数据发生重复,或者Flink任务作业失败后重启,上游数据会再次被写入到结果表中。