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/