【发布时间】:2014-10-29 10:17:08
【问题描述】:
我对散列数据库字段值感兴趣,以尝试检测表中的更改。
有问题的数据库(Vertica)有一个 HASH 函数,我猜主要是供内部使用,以及其他哈希。内部函数给NULL分配一个非空的hash值(实际上不同数据类型的NULL是不同的)。
我可能最终会使用该内部散列函数,但如果事实证明它的统计特性和避免冲突不是那么好,我该如何使用其他提供的函数,如 md5 等(我不需要强大的加密散列) 当他们都将 NULL 发送到 NULL 时?
当然,我可以将另一个哈希值分配给 NULL,但我不知道一种优雅的方式来做到这一点。 (而不是扩展散列值集并为 NULL 添加一个。)
【问题讨论】:
-
空值意味着没有数据要散列。您必须手动分配空值应该发生的情况。如果没有看到一些代码,我们很难提供上下文相关的解决方案。
-
嗯,让我想到这一点的是,Vertica 的内部 HASH 函数显然确实为 NULL 分配了一个值。我认为这必须涉及对二进制表示进行操作。
-
上下文:我想检测表中的变化。特别是一张表有数十亿行和大约。 40 列不同的数据类型。我不想问“表格是否发生了变化”,而是想将其分解为日期范围。 (因此哈希值将覆盖每个日期范围内的所有行。)我不能使用触发器。