南充房管局网站查询房产,湖北省城乡建设厅证书查询,怎么新建一个网站,网站建设那好常见的方式#xff1a; hive里最常用的方式生成唯一id#xff0c;就是直接使用 row_number() 来进行#xff0c;这个对于小数据量是ok的#xff0c;但是当数据量大的时候会导致#xff0c;数据倾斜#xff0c;因为最后生成全局唯一id的时候#xff0c;这个任务是放在一个…常见的方式 hive里最常用的方式生成唯一id就是直接使用 row_number() 来进行这个对于小数据量是ok的但是当数据量大的时候会导致数据倾斜因为最后生成全局唯一id的时候这个任务是放在一个reduce里进行的数据量过大会有很大的瓶颈。 优化的方式
主体的思想就是先分再合参考下一个思路 这个思路是借鉴了一篇文章的思路附上链接bitmap用户分群方法在贝壳DMP的实践和应用_架构_侯学博_InfoQ精选文章 我是只想用sql来做具体的实现如何实现最好呢
1将数据打散,分为N份
2在这N份里先分别给一个行号使用row_number()
3: 统计出来每份里有多少条数据这个数据要在第四步里使用
4: 计算出来到当前分片最大的行号是多少这个就是我如下图示里的上一个分片的最大行号下当前分片数据的条数sum() over() 来实现的 with temp01 as (selecticcid,imsi,cast(rand() * 200 as bigint) numfrom原始表wheredate_id 20231123;)
selecta.iccid,a.imsi,a.num as a_num,a.rn,b.num as b_num,b.cnt,b.amt,nvl(b.amt, 0) rn as final_num
from(selecticcid,imsi,num,ROW_NUMBER() OVER(PARTITION BY num) AS rnfromtemp01) aleft outer JOIN (selectnum,cnt,
// 这个sum就是生成到当前分区最大的行号是多少这里一定要理解sum() over这个窗口函数是怎么个原理。再强调一次是到当前分区累加起来的行号。sum(cnt) over(order bynum) amtfrom(selectnum,count(*) cntfromtemp01group bynum) a) b on a.num -1 b.num;
配上完整的sql实现逻辑