ODPS-SDK调用排坑笔记(2)

简介: 业务上需要通过对二级类目的聚合,输出每个类目下排名30天销量排名TOP100的商品信息。抽象到SQL层面就是:通过对X字段的分组,获取每个分组前N条数据。

一、业务背景

业务上需要通过对二级类目的聚合,输出每个类目下排名30天销量排名TOP100的商品信息。抽象到SQL层面就是:通过对X字段的分组,获取每个分组前N条数据。

二、原始方案

说实话,这个方法有些low,但起码能实现功能。使用存储过程,思路如下:

1.创建一张临时表先放着:create temp_top_by_catename2

2.查询所有的二级类目: select distict cate_level2_name from xxx where ds=max_pt('xxx')

3.将cate_level2_name存储在变量数组中catename[];

4.游标遍历catename[];select * from xxx as a where a.cate_level2_name=catename order by sales_count_30 desc limit 100

将每个二级类目的查询结果insert到temp_top_by_catename2表
方案缺点:
(1)时间成本太高,因为有多少个catename分组,就要查询N次表,更改插入N次表。跑了30小时才插了<100个类目分组
(2)另外表基数量很大,每次查询计划的cost值很高。
(3)如果SQL有中断,数据的完整性很难保证

三、优化方案

基于上述方案的种种不爽,问自己一个问题,能否一条语句可以解决Group+Order+topN输出?于是开始了度娘之旅,但都是些嵌套+子查询的方式曲线救国,并达不到想要的效果。在试,从ODPS的函数着手,翻了一遍返现只有一个神奇API貌似像,名字给出:“row_num”.先普及下这个函数的定义:

语法:row_number() over (partition by 分组字段 order by 排序字段 desc ) as topNum

拆解:

(1)partition by :按照某一字段进行分组

(2)order by:分组之后按照该字段进行升序或降序排列

(3)topNum:自定义的名字,就是后面我们要用到的TOPN,同步数据时可设置成变量,动态调整

四、源码
image
五、性能结果
image
自此 over,知识有限,大家如有更好的方案欢迎私聊。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
1月前
|
传感器 Java API
Spring揭秘:Aware接口应用场景及实现原理!
Aware接口赋予了Bean更多自感知的能力,通过实现不同的Aware接口,Bean可以轻松地获取到Spring容器中的其他资源引用,像ApplicationContext、BeanFactory等。 这样不仅增强了Bean的功能,还提高了代码的可维护性和扩展性,从而让Spring的IoC容器变得更加强大和灵活。
127 0
Spring揭秘:Aware接口应用场景及实现原理!
|
SQL XML JSON
【笔记】API参考—账号管理—ModifyAccountPrivilege
调用ModifyAccountPrivilege接口修改普通账号的权限。
|
XML JSON 安全
【笔记】API参考—账号管理—DeleteAccount
调用DeleteAccount接口删除普通账号。
|
XML JSON API
【笔记】API参考—实例管理—DescribeDBInstanceAttribute
调用DescribeDBInstanceAttribute接口查看实例的详细信息。
|
1月前
|
缓存 算法 Java
在JVM中 判定哪些对象是垃圾?
在JVM中 判定哪些对象是垃圾?
|
存储 运维 大数据
大数据上云存算分离演进思考与探讨-2022
当前大数据上云与存算分离的技术趋势越来越成为行业标准与发展方向。作为大数据商业化的践行者,从存算分离的演进/定义/价值/架构应用/实践/对比等多个维度来分析与探讨其发展历程与组成体系。为大数据存算分离技术整体发展添砖加瓦。
2615 2
大数据上云存算分离演进思考与探讨-2022
|
存储 分布式计算 运维
阿里云E-MapReduce产品新动态及开源大数据前沿技术 2023-3月刊
开源大数据EMR产品技术月刊,涵盖本月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解开源大数据最新动态。
48441 4
阿里云E-MapReduce产品新动态及开源大数据前沿技术 2023-3月刊
免费API汇总整理
免费API汇总整理
232 0
|
SQL 存储 分布式计算
ODPS SQL优化总结
ODPS(Open Data Processing Service)是一个海量数据处理平台,基于阿里巴巴自主研发的分布式操作系统(飞天)开发,是公司云计算整体解决方案中最核心的主力产品之一。本文结合作者多年的数仓开发经验,结合ODPS平台分享数据仓库中的SQL优化经验。
2258 0
ODPS SQL优化总结
|
分布式计算 大数据 Java
如何使用Tunnel SDK上传/下载MaxCompute复杂类型数据
基于Tunnel SDK如何上传复杂类型数据到MaxCompute?首先介绍一下MaxCompute复杂数据类型: 复杂数据类型 MaxCompute采用基于ODPS2.0的SQL引擎,丰富了对复杂数据类型类型的支持。
9293 0