我想为hive表创建一个代理键,但每次将数据放入表中时都可以复制。其他表将通过代理键引用此表,并且可以重新生成表以添加更多行,并且不会破坏该关联。我的想法是基本上有一个表中所有列的复合键。
连接我的所有列并将该字符串的md5哈希用作该行的简单查找是否合理?
我在这个解决方案中遇到的问题是:
关于数据的说明:
答案 0 :(得分:0)
您已回答了自己的问题:
没有确切的保证哈希值是唯一的(尽管如此) 我的数字,碰撞是不太可能的)
键必须是唯一的,这是他们的目的。如果你给我一个记录密钥(无论是代理还是自然),我都可以找到该记录。哈希不会是独一无二的。
你需要回过头来问自己为什么要这个代理键。如果仅用于唯一标识符,则使用您的DB的唯一标识符序列类型并完成它。
如果有业务需求(需要复制SK< - 为什么?)然后回到那个原因并尝试为它提出一个更简单的解决方案。
(我们尝试使用哈希进行类型2更改检测 - 它不起作用,我们又按列比较回到列中)
这让我很担心:
有些情况下,两行具有完全相同的数据,如果它们最终使用相同的密钥则很好
如果您的数据库中有2条完全相同的记录,则表示您缺少数据:即使是序列或时间戳,也可用于区分记录。如果你没有自然键,你可能会遗漏一些东西。