来自所有列散列的代理键

时间:2015-11-13 17:24:01

标签: hive surrogate-key

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

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

我在这个解决方案中遇到的问题是:

  • 如果行中的数据发生更改,则关联仍将中断
  • 没有确切的保证哈希值是唯一的(虽然我的数字,碰撞是不太可能的)

关于数据的说明:

  • 数据按日分区,大约有10万行 每天。
  • 有些情况下,两行具有完全相同的数据和 如果他们最终得到相同的密钥就没问题。

1 个答案:

答案 0 :(得分:0)

您已回答了自己的问题:

  

没有确切的保证哈希值是唯一的(尽管如此)   我的数字,碰撞是不太可能的)

键必须是唯一的,这是他们的目的。如果你给我一个记录密钥(无论是代理还是自然),我都可以找到该记录。哈希不会是独一无二的。

你需要回过头来问自己为什么要这个代理键。如果仅用于唯一标识符,则使用您的DB的唯一标识符序列类型并完成它。

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

(我们尝试使用哈希进行类型2更改检测 - 它不起作用,我们又按列比较回到列中)

这让我很担心:

  

有些情况下,两行具有完全相同的数据,如果它们最终使用相同的密钥则很好

如果您的数据库中有2条完全相同的记录,则表示您缺少数据:即使是序列或时间戳,也可用于区分记录。如果你没有自然键,你可能会遗漏一些东西。