gpt4 book ai didi

Azure 数据流 md5 函数不将十进制值识别为唯一

转载 作者:行者123 更新时间:2023-12-02 07:21:54 38 4
gpt4 key购买 nike

我们使用 Azure 数据流在 Azure SQL 数据仓库中生成数据表的历史记录。在数据流中,我们在所有列上使用 md5 或 sha1 函数来生成唯一的行指纹来检测记录中的更改,或识别已删除/新记录(相当标准的历史记录技术)。

对于某些数据表,我们有包含十进制值的列(例如数据类型 DECIMAL(18,1))。如果我查看在一个整数、一个文本和一个小数列上生成的 md5 哈希值,我预计这三行在 Azure 数据流中生成不同的哈希值: enter image description here

但是,这三行获得完全相同的哈希值,这意味着我们无法检测 [id] = 1 的记录的 [value] 字段中的更改。如果十进制值作为文本存储在数据库(或在 md5 函数中转换为字符串),哈希值不同:

enter image description here

这导致我们的一些历史表无法准确记录数据,只有小数列中的值发生了变化。

我的问题:有谁知道这是 Azure 数据流的“设计”,还是需要 Microsoft 修复的错误?

最佳答案

更新:这个问题去年已经修复,并且性能足够好,可以停止使用 toString

是的,这是设计使然,同时也是一个错误。

我也遇到过这个问题,我和这里的团队想出了与您相同的解决方法,但执行时间增加了一倍。

经过大约 1 小时对 Microsoft 的讨论后,我们发现:

  • float 不受影响
  • 指定精度和小数位数的数据类型会受到影响
  • 行为是 md5,最后一个是将整数四舍五入并对其应用 md5。

MD5 将为这些值返回相同的值:

  • 0
  • 0.1
  • 0.4

以下值的行为相同:

  • 0.5
  • 0.6
  • 1

将返回不同的哈希值:

  • 0.4
  • 0.9
  • 1.5
  • 2.5

我被告知预计将于二月份修复。

如果不使用像我这样的列函数(byNames),您可以将您的值乘以以 10 为底的幂,以刻度为指数。

这比 toString 更快。

关于Azure 数据流 md5 函数不将十进制值识别为唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64575556/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com