hbase rowkey设计

hbase的设计:

1.每一行数据必定是给某一个应用所使用的.即有一个appkey 如 94238

2.rowkey 就应该是这样了

concat_ws('\u0004'  		--使用 \u0004 作为每个字段分隔符
,concat(substr(md5(concat('app_name','94238')),1,4),':md5') --使用md5打散不同app的存放位置 
,'app_name:biz'				--这里开始实质的内容. 业务类型(biz)是 app_name
,'94238:app'				--appkey是94238
,concat('ddd:',stat_date)	--日期
,'2:cate'					--具体的种类
) as rowkey

 在来一个例子

 

select
concat(concat(substr(MD5(concat(coalesce(cat_id,''),'92811')),1,4),':md5'),'\004',cat_id,':cate1\004','92811:app\004',bc_type,':biz\004dhr:','${date}${hour}','\004',seller_id,':seller') as rowkey
stat_date		 		--统计日期
,stat_hour				--当前小时
,seller_id              --卖家id
,seller_nick            --卖家 nick
,bc_type                --bc类型
,cat_id                 --主营类目id
,cat_name               --主营类目名称
,pay_amt				--金额
,rank_amt				--排名
from seller_top_500 --卖家排名

--这个rowkey的设计背景是统计  每个大类小类下卖家金额top500
--根据'\004'做一级分隔符,':'做为二级分割,1-4位为MD5打散使用
--整个rowkey的含义分别是 先做md5,后依次是cate_id,appkey(92811),bc_type,时间,seller_id
--rowkey中每一个子key又分前缀后缀之分(值在前还是在后),比如cat_id就是前缀,时间(dhr)就是后缀. 
--之所以时间是后缀的是因为,应用本身会精确定位到每一个小时,所以还是应该把每个小时的数据都放在一起
--之所以别的用前缀是因为,需要把数据打的越散越好.
--为什么不用seller_id作为打散列,而用cate_id,原因是取数是根据大类小类取top500,把seller_id,打散了完全没有意义
--为什么不用大类作为打散列的原因,是大类只有 B和C 2个值.打散的意义也不大.
--业务取数的时候有个cate_id的维表,根据上面的逻辑拼出一个rowkey来.
--scan 'table',STARTROW=>'md5+cate_id+app+bc_type+yyyymmddhh'

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值