0

我想为 hive 表创建一个代理键,但每次将数据放入表中时都可以复制一个代理键。其他表将通过代理键引用该表,并且可以重新生成该表以添加更多行,并且该关联不会被破坏。我的想法是基本上有一个表中所有列的复合键。

连接我的所有列并将该字符串的 md5 哈希用作对该行的简单查找是否合理?

我在此解决方案中看到的问题是:

  • 如果行中的数据发生变化,关联仍然会被破坏
  • 无法真正保证哈希值是唯一的(尽管使用我的数字,冲突的可能性很小)

数据注释:

  • 数据按天划分,每天大约有 100k 行。
  • 在某些情况下,两行具有完全相同的数据,如果它们最终具有相同的键就可以了。
4

1 回答 1

1

您已经回答了自己的问题:

无法真正保证哈希值是唯一的(尽管使用我的数字,冲突的可能性很小)

键必须是唯一的,这就是它们的目的。如果您给我一个记录键(无论是代理键还是自然键),我都能找到该记录。哈希不会是唯一的。

你需要回去问问自己为什么要这个代理键。如果它只是用于唯一标识符,则使用您的数据库的唯一标识符|序列类型并完成它。

如果有业务需求(需要复制 SK <- 为什么?)然后回到那个原因并尝试为它想出一个更直接|更简单的解决方案。

(我们尝试使用哈希进行 type2 更改检测 - 它不起作用,我们返回逐列比较)

这与我有关:

在某些情况下,两行具有完全相同的数据,如果它们最终具有相同的键也没关系

如果您的数据库中有 2 条完全相同的记录,那么您将丢失数据:即使是序列或时间戳,也可以用来区分您的记录。如果您没有自然键,您可能会遗漏一些东西。

于 2016-08-09T23:31:51.803 回答