【问题标题】:Hash database values such that NULL is assigned an integer, not NULL散列数据库值,以便为 NULL 分配一个整数,而不是 NULL
【发布时间】:2014-10-29 10:17:08
【问题描述】:

我对散列数据库字段值感兴趣,以尝试检测表中的更改。

有问题的数据库(Vertica)有一个 HASH 函数,我猜主要是供内部使用,以及其他哈希。内部函数给NULL分配一个非空的hash值(实际上不同数据类型的NULL是不同的)。

我可能最终会使用该内部散列函数,但如果事实证明它的统计特性和避免冲突不是那么好,我该如何使用其他提供的函数,如 md5 等(我不需要强大的加密散列) 当他们都将 NULL 发送到 NULL 时?

当然,我可以将另一个哈希值分配给 NULL,但我不知道一种优雅的方式来做到这一点。 (而不是扩展散列值集并为 NULL 添加一个。)

【问题讨论】:

  • 空值意味着没有数据要散列。您必须手动分配空值应该发生的情况。如果没有看到一些代码,我们很难提供上下文相关的解决方案。
  • 嗯,让我想到这一点的是,Vertica 的内部 HASH 函数显然确实为 NULL 分配了一个值。我认为这必须涉及对二进制表示进行操作。
  • 上下文:我想检测表中的变化。特别是一张表有数十亿行和大约。 40 列不同的数据类型。我不想问“表格是否发生了变化”,而是想将其分解为日期范围。 (因此哈希值将覆盖每个日期范围内的所有行。)我不能使用触发器。

标签: sql database hash null


【解决方案1】:

您可以简单地选择表的一部分(我的意思是从表中选择所需的列),生成该查询数据的哈希函数,并在下次进行比较。

对一个表的查询是另一个表。跟踪对该新表的更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2013-08-21
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2020-02-23
    相关资源
    最近更新 更多