需求:
大数据环境,特别的hive的表,很多是没有主键的。有时候sql查询的时候,需要自关联,这就需要根据数据采用不同的方案
自关联
数据表test(id,name,age),如果有主键id,自关联sql如下
select * from test A,test B
where A.id = B.id
方案
1、没有主键,存在排序字段进行自关联
数据表test(name,age,cjsj,....),如果没有主键id,有排序字段创建时间cjsj, 自关联sql如下
select * from
(select *, row_number() over (order by cjsj desc) as pk_id from test) A
,(select *, row_number() over (order by cjsj desc) as pk_id from test) B
where A.pk_id = B.pk_id
2、没有主键,有唯一组合键
数据表test(name,age,pro,cjsj,....),如果没有主键id,存在唯一键name,pro, 自关联sql如下
select * from test A,test B
where A.name = B.name
and A.pro = B.pro
3、如果没有排序字段,没有唯一键,MD5
数据表test(name,age,pro,cjsj,....),如果没有主键id,没有唯一键。可以给每行数据生成唯一的MD5值,把MD5值进行关联。 这种情况比较少,性能差