hive中几种唯一主键的选择和优劣比较

hive表是没有主键的,但在建表时最好加一个主键,方便查询。联合主键另说,其实也就可一利用联合主键来。
1.uuid
2.row_number()
例子:
insert into tbl_dim
select row_number() over (order by tbl_stg.id) + t2.sk_max, tbl_stg.*
from tbl_stg join (select coalesce(max(sk),0) sk_max from tbl_dim) t2;
注:其实就是先查旧表取最大的id值。在此基础上再进行递增加。参考这位大神文章
https://blog.csdn.net/wzy0623/article/details/53893174/
3.md5()

个人体会:
个人比较喜欢md5()方式,如果复合主键的话MD5(concat(str,str…)或concat_ws(‘连接符’,str1,str2…))。
原因如下:1.uuid太长了,随机的不利于重跑,如果别的维度表要用到此维度表主键做外键,只要重跑了会变,那么作为外键值又得改了。2.row_number()over(),数据量非常大时,会出现重复,但一张表数据量1个亿左右好问题不大。如果里面排序了,如果新加进来的数据,值又变了,如果做了外键又得改,这不是坑吗?如图,对照上一篇row_number的 所以这个也不合适。
在这里插入图片描述

md5()的话,只要里面加密的值不变怎么跑都是一样的,稳定所以和这个还是比较合适做主键的,这个因此得要去重一下,比较适合做唯一主键的。个人也比较喜欢。
参考:https://blog.csdn.net/wzy0623/article/details/53893174/

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值