专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

基于Hive的数据立方体实践

  Tech导读本文主要基于京东集团的大数据平台,详细讲述了使用Hive实现数据立方体的方法。通过阅读本文,读者可了解Hive批处理的通用多维分析技术及调优措施,并应用于生产环境。
  01hr概述
  在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
  基于京东物流业务持续拓展、复杂化,业务侧人员(简称:业务侧)根据业务场景需要从数据角度做经营分析、运营分析或大促监控等。业务侧可以根据仓储、拣运、终端等场景涉及的业务动作、业务环节、业务过程等多维度分析一线操作动作是否标准、工作效率高低等。有些分析需要多个维度、有些分析甚至穷尽所有维度,统计的结果数据集,称之为数据立方体(DataCube)。通常情况下,工程师思考的第一实现方式是unionall,这很有可能会导致代码冗余。然而,通过Hive的高阶函数:withcube、groupingsets、withrollup,同样也可以达到unionall的效果,且代码相对简单易维护。
  02hr方法简介
  理解,首先MCube会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。从设计稿出发,提升页面搭建效率,亟需解决的核心问题有:
  准备样例数据,创建表结构,并将数据加载到所创建的表中:【SQL】CREATETABLEtmp。tmphivecubetest(provincestringCOMMENT省份,citystringCOMMENT城市,populationintCOMMENT人口数量)ROWFORMATDELIMITEDFIELDSTERMINATEDBYSTOREDASORCtblproperties(orc。compressSNAPPY);insertintotmp。tmphivecubetestselect北京市,大兴区,260unionallselect北京市,通州区,300
  数据插入成功,查询数据:
  图1准备样例数据
  2。1withcube简介
  所有参与粒度统计的字段都要写在groupby后面,withcube函数会将所有可能的粒度结果统计出来:N维数据模型,通过cube操作,可产生2的N次方种聚合方式。
  要求统计各个维度的人口数据?
  1。使用unionall方式统计,代码如下:【SQL】selectprovince,city,sum(population)fromtmp。tmphivecubetestgroupbyprovince,cityunionallselectprovince,nullcity,sum(population)fromtmp。tmphivecubetestgroupbyprovinceunionallselectnullprovince,city,sum(population)fromtmp。tmphivecubetestgroupbycityunionallselectnullprovince,nullcity,sum(population)fromtmp。tmphivecubetest
  统计结果如下:
  图2unionall实现DataCube
  2。使用withcube方式,代码如下:【SQL】selectprovince,city,sum(population)fromtmp。tmphivecubetestgroupbyprovince,citywithcube
  统计结果如下:
  图3withcube实现DataCube
  观察对比可知,unionall与withcube统计结果一致,但withcube代码风格简洁易读、便于开发维护。
  2。2groupingsets简介
  groupingsets可以灵活配置需要聚合的列名,按照用户需求维护聚合列的组合配置即可。假设需要(col1),(col1,col2)两种维度,配置在groupby之后即可,不需要的维度不用配置。
  要求统计北京市及各区人口数量?
  1。使用unionall方式统计,代码如下:【SQL】selectprovince,city,sum(population)fromtmp。tmphivecubetestgroupbyprovince,cityunionallselectprovince,nullcity,sum(population)fromtmp。tmphivecubetestgroupbyprovince
  统计结果如下:
  图4unionall实现DataCube
  2。使用groupingsets方式,代码如下:【SQL】selectprovince,city,sum(population)fromtmp。tmphivecubetestgroupbyprovince,citygroupingsets((province),(province,city))
  统计结果如下:
  图5groupingsets实现DataCube
  观察对比可知,unionall与groupingsets统计结果一致,但groupingsets代码风格简洁易读、便于开发人员灵活配置统计维度。
  注意:
  (1)groupingsets中的所有字段,必须出现在groupby之中;
  (2)groupingsets中的所有字段,必须出现在groupby之中;groupingsets可包含多种粒度,每种粒度单独使用在英文括号内部,不同粒度之间用逗号间隔。
  2。3withrollup简介
  withrollup主要是针对不同粒度数据的聚合处理,从右到左逐层递增(递减)组合计算,不允许左侧为null右侧非null的情况出现。
  要求统计北京市及各区人口数量?
  1。使用unionall方式统计,代码如下:【SQL】selectnullprovince,nullcity,sum(population)fromtmp。tmphivecubetestunionallselectprovince,nullcity,sum(population)fromtmp。tmphivecubetestgroupbyprovinceunionallselectprovince,city,sum(population)fromtmp。tmphivecubetestgroupbyprovince,city
  统计结果如下:
  图6unionall实现DataCube
  3。使用withrollup方式,代码如下:【plain】selectprovince,city,sum(population)fromtmp。tmphivecubetestgroupbyprovince,citywithrollup
  统计结果如下:
  图7withrollup实现DataCube
  观察对比可知,unionall与withrollup统计结果一致,但withrollup代码风格简洁易读,更适合按照层级递增(递减)方式聚合。
  注意:withrollup对groupby后的字段排列顺序要求非常严格,顺序不一样,统计结果也会不一样。
  03hr实践避坑
  理解,首先MCube会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。从设计稿出发,提升页面搭建效率,亟需解决的核心问题有:
  前文已介绍数据cube实践方法,而在实际开发过程中,用户想要不同维度组合信息做统计。可能用户前期不确定想要统计哪些维度,可将历史数据所有维度组合的指标存储起来,用户想要查看数据时,可用groupingid(grouping与id用2个连接)筛选预期数据。groupingid是hive内置变量,可以和上文方法配合使用。groupingid返回对应于与行关联的grouping位向量的数字,在功能上等同于获取多个grouping函数的结果并将它们连接成一个位向量(一串1和0)。使用groupingidn的单个条件来识别所需的行,可以避免使用多个grouping函数并使行过滤条件更易于表达。
  通过实例展示groupingid使用方法,参考下图:
  图8Hive内置多维分组标记groupingid
  了解groupingid使用方法后,使用withcube方式统计北京市及各区人口数量,groupingid值为0或2的数据需要剔除,如下图:
  图9groupingid使用示例
  查询结果并非预期结果,好像groupingidin(0,1,2,3)的所有数据都被剔除了。查看执行计划:
  图10Hive执行计划
  1。子查询外的where条件在第一个map中被执行;
  2。cube执行前,groupingid已经被赋值默认为‘0’。
  通过分析可得,由于groupingid默认值为‘0’,所以在做条件过滤groupingidin(1,3)判断结果为false,导致没有输出结果。其实,这是hive本身执行计划优化导致,称为谓词下推。其是为了将过滤条件提前到子查询中,以达到在map端尽量缩减数据的目的,碰巧遇到groupingid先赋默认值的内置方法。可以通过增加参数(SEThive。optimize。ppdfalse;默认值为true),关闭谓词下推,可以得到预期结果,参考下图:
  图11关闭谓词下推
  04hr总结
  理解,首先MCube会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
  在开发数据立方体实践过程中,可根据实际场景选择grouping方法:
  1。在不确定维度组合情况下,推荐使用withcube和groupingid搭配使用,灵活聚合;
  2。在已确定维度组合情况下,推荐使用groupingsets,有效节省存储空间;
  3。如果存在层级鲜明、大小粒度不交叉的情况下,推荐使用withrollup,灵活上卷、下钻。
  作者:崔显飞
  来源:微信公众号:京东技术
  出处:https:mp。weixin。qq。comshQezFlGvg6R3iJONz1dUTg

备战高考胡鑫宇事件留给我们的思考2023年2月2日,江西省市县联合工作专班在上饶市铅山县召开新闻发布会,通报胡鑫宇事件。2022年10月14日,江西省上饶市铅山县致远中学高一学生胡鑫宇失踪。事件发生后,党委政府高骁龙8Gen2手机迎发布高峰,骁龙8机型已过气?综合体验同样重要随着新年的结束,手机圈又开始热闹起来。目前已经官宣的新机包括了三星GalaxyS23系列真我GTNeo5荣耀Magic5系列等,不难看出2月份必然是一个新机发布高峰期。而作为各品牌华为Mate50Pro你想知道的优缺点都在这里!优点1。鸿蒙是个非常人性化的系统,很少很少有反人类逻辑,默认设置就很舒服。2。拍照不错,很有感觉。3。这屏幕,我能给96分。作为参考,magic4给95,X80给59,荣耀70pr快递越来越贵,顺丰一年净赚超60亿,韵达险些失守行业老二本文来源时代财经作者林心林随着A股2022年度业绩预告披露收官,快递行业过去一年的成绩单也浮于水面。1月30日,包括顺丰控股(002352。SZ)韵达股份(002120。SZ)申通美媒拜登国情咨文要讲什么?据美国纽约时报网站2月3日报道,美国总统拜登将于2月7日发表国情咨文,这也将是拜登首次向在新一届众议院中占多数的共和党发表讲话。数周来,拜登的高级经济助手们一直在为这次国情咨文重点人过五十,别折腾了郝有花(图片来自网络)人过五十需要在合适的位置停下脚步回到最安稳的境界,好好休息别再折腾了,儿孙自有儿孙福蓦然回首,你会发现前半生走过的,吃过的,痛过的像一部电影在上演酸甜苦辣,一平凡而伟大的追梦人来源人民网观点频道在漫长的历史长河中,有这样一群人,他们生而平凡,但是他们拥有着不凡的梦想,脚踩六便士,心中有月亮。有人会问什么才是平凡?我认为,人类自身的渺小相对于宇宙的广阔无垠抓住寒假的小尾巴,觅得奥帆好去处,遇见海上好时光!一转眼在寒假欢乐中的同学们还有一个周又将迎来了开学季赶在寒假结束之前趁着免费游海底世界崂山景区活动搭乘海上航线感受大美崂山的极致风景或是来青岛海底世界与海洋精灵们来一场亲密邂逅涨知谷爱凌回斯坦福,校园内穿超短裙!秀白皙美腿,边养伤边读书当地时间2月3日,谷爱凌更新了个人INS动态,晒出了一张近照,表明自己已经回到了斯坦福大学,又开始了读书生活。众所周知,前段时间谷爱凌因伤退出XGames的比赛,之后去客串了节目主8岁走过最远的要学费之路!蜿蜒曲折的山路越来越陡,座座高山在太阳余光的映照下有如鬼魅,突然惊起的鸟鸣闯入眼帘的树影甚至一不小心掉落的一粒石子都能激起突突的心跳和满身的鸡皮疙瘩。突然,低沉的鸟鸣划破了山谷的寂隐形的翅膀有人被林语堂先生的生活的艺术吸引了眼球,感悟其中的经典语录。发现新大陆一般地唤俺前去伴读,言称老先生的话简直就是对你的人生总结与待人接物的形象刻画,你完全可以对号入座!林先生说人生
全新奔驰EQE实车搭AR实景导航!空间续航均胜过蔚来ET7?在目前的新能源市场中,各家汽车厂商都在积极布局谋图发展,而BBA三巨头也顺应时代发展潮流开启电气化转型之路。宝马打出i系列,奥迪推出etron家族,而奔驰则是以EQ体系布局面向新能特斯拉中国三天内获3万辆订单,陶琳称卖不动才降价是无稽之谈IT之家1月10日消息,近日,特斯拉中国宣布,在售Model3及ModelY全系国产车型将调整售价,Model3起售价直降3。6万元,ModelY起售价直降2。9万元,两款车型其余千亿军工央企大动作来了!见习记者骆吴在国资委的督导下,千亿央企中国航空工业集团,正在将其直升机业务在A股整体上市。1月9日晚间,中直股份(600038)公告,公司拟向控股股东中航科工发行股份购买其持有的昌开盘A股三大指数高开沪指涨0。06,全聚德复牌跌停金融界1月10日消息今日A股三大指数集体小幅高开,沪指涨0。06,报3178。02点,深成指涨0。05,报11455。6点,创业板指涨0。05,报2441。5点科创50指数涨0。1港股开盘恒生指数跌0。08,哔哩哔哩跌4。55金融界1月10日消息今日港股市场低开,港股恒生指数跌0。08,报21370。42点,恒生科技指数跌0。56,报4545。12点,国企指数跌0。09,报7279。43点,红筹指数跌0人民币兑美元中间价上调654个基点至6。7611元,升值至2022年8月15日以来新高金融界1月10日消息今日人民币兑美元中间价6。7611元,较上一交易日(1月9日)的6。8265元上调654个基点。人民币中间价升值至2022年8月15日以来新高。今年以来,人民币酷狗联合京东物流打造2023年京心为你送爱回家春节公益行动春节将至,又是一年一度的春运返乡潮。近日,酷狗音乐联合京东物流主办的2023年京心为你送爱回家春节公益行动正式启动。在春节这个温暖团圆的日子里,双方将推出温暖回家路公益寄递AI爸妈出境过年!湖北人春节出境游增长超3倍随着防疫政策调整,近期,各大在线旅行平台出入境订单猛涨,旅游市场逐渐升温。携程数据显示,2022年12月27日以来,从内地用户预订来看,中国澳门中国香港曼谷新加坡吉隆坡金边是热度攀崔东树特斯拉降价短期内不会引发车企跟随,春节后或有降价对于近期特斯拉官方售价下调,乘联会秘书长崔东树认为,这并不会引发其他车企短期之内的降价行为。春节之前,整个市场属于需求严重低迷的阶段,目前降价也没有意义推出新品也没有意义,他预计,基金春节之前要不要减仓老杨,都说年前没有行情,请教一下用不用减仓。这是一位铁粉朋友的留言,谢谢这位铁粉朋友。我觉得,你需要考虑以下几个问题1你玩基金的钱,是不是闲钱如果你是用闲钱玩的,那就跟过春节没有什孩子最爱喝的4种饮料,没营养还伤娃,家长别再觉得无所谓了很多孩子都喜欢喝饮料,这是见怪不怪的事了,但我没想到,有的家长的做法让人感到不可思议。前段时间,我去餐厅吃饭,看到隔壁桌大概两三岁的孩子顺手拿起了桌子上的奶茶。我以为她妈妈会立刻阻
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网