MaxCompute 实现增量数据推送(全量比对增量逻辑)
ODPS 2.0 支持了很多新的集合命令(专有云升级到3版本后陆续支持),简化了日常工作中求集合操作的繁琐程度。增加的SQL语法包括:UNOIN ALL、UNION DISTINCT并集,INTERSECT ALL、INTERSECT
DISTINCT交集,EXCEPT ALL、EXCEPT DISTINCT补集。
语法格式如下:
select_statement UNION ALL select_statement; select_statement UNION [DISTINCT] select_statement; select_statement INTERSECT ALL select_statement; select_statement INTERSECT [DISTINCT] select_statement; select_statement EXCEPT ALL select_statement; select_statement EXCEPT [DISTINCT] select_statement; select_statement MINUS ALL select_statement; select_statement MINUS [DISTINCT] select_statement;
用途:分别求两个数据集的并集、交集以及求第二个数据集在第一个数据集中的补集。
参数说明:
• UNION: 求两个数据集的并集,即将两个数据集合并成一个数据集。
• INTERSECT:求两个数据集的交集。即输出两个数据集均包含的记录。
• EXCEPT: 求第二个数据集在第一个数据集中的补集。即输出第一个数据集包含而第二个数据集不
包含的记录。
• MINUS: 等同于EXCEPT。
实际项目中有一个利用两日全量数据,比对出增量的需求(推送全量数据速度很慢,ADB/DRDS等产品数据量超过1亿,建议试用增量同步)。我按照旧的JOIN方法和新的集合方法做了下比对验证,试用了下新的集合命令EXCEPT ALL。
测试
-- 方法一:JOIN -- other_columns 代表很多列 create table tmp_opcode1 as select * from( select uuid,other_columns,opcode2 from( -- 今日新增+今日变化 select t1.uuid ,t1.other_columns ,case when t2.uuid is null then 'I' else 'U' end AS opcode2 from prject1.table1 t1 left outer join prject1.table1 t2 on t1.uuid=t2.uuid and t2.dt='20200730' where t1.dt='20200731' and(t2.uuid is null or coalesce(t1.other_columns,'')<>coalesce(t2.other_columns,'')) union all -- 今日删除 select t2.uuid ,t2.other_columns ,'D' as opcode2 from prject1.table1 t2 left outer join prject1.table1 t1 on t1.uuid=t2.uuid and t1.dt='20200731' where t2.dt='20200730' and t1.uuid is null)t3)t4 ;
Summary: resource cost: cpu 13.37 Core * Min, memory 30.48 GB * Min inputs: prject1.table1/dt=20200730: 32530802 (946172216 bytes) prject1.table1/dt=20200731: 32533538 (947161664 bytes) outputs: prject1.tmp_opcode1: 4506 (271632 bytes) Job run time: 26.000
-- 方法二:集合 -- other_columns 代表很多列 create table tmp_opcode2 as select * from( select t3.* from( -- 今日新增+今日变化 select uuid,other_columns,'I' as opcode2 from( select uuid,other_columns from prject1.table1 where dt = '20200731' except all select uuid,other_columns from prject1.table1 where dt = '20200730')t union all -- 今日删除 select t2.uuid ,t2.other_columns ,'D' as opcode2 from prject1.table1 t2 left outer join prject1.table1 t1 on t1.uuid=t2.uuid and t1.dt='20200731' where t2.dt='20200730' and t1.uuid is null)t3)t4 ;
Summary: resource cost: cpu 35.92 Core * Min, memory 74.26 GB * Min inputs: prject1.table1/rfq=20200730: 32530802 (946172216 bytes) prject1.table1/rfq=20200731: 32533538 (947161664 bytes) outputs: prject1.tmp_opcode2: 4506 (259416 bytes) Job run time: 66.000
性能
集合的方法与JOIN的方法相比,在资源(1倍)使用和时间(1倍)上都有较多的劣势。建议实际使用JOIN方法。
结果
通过多种方法比对验证,两种方法的增量识别均正确,可以向下游提供增量数据。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
稳赚不赔~Spark社区招募志愿者!
首先了解下这是个什么组织 Apache Spark是大数据方面最大的开源社区之一,拥有来自250多个组织的超过1000个贡献者,以及遍布全球570多个地方的超过30万个Spark Meetup社区成员。 在中国,阿里云计算平台EMR团队组织了为国内Spark开发者服务的Spark中国技术交流社区,运营了专门的社群、技术圈和公众号Apache Spark技术交流社区,用于分享和交流Spark相关信息。目前我们完全公益的服务于超过1w的国内开发者。这中间也得到了国内外的互联网大厂,举个栗子:Databricks,领英,蚂蚁金服,Intel等多家技术团队的支持。感兴趣微信关注公众号了解 Spark社区招募志愿者 活儿少礼多: 送书送衣服送杯子送水壶送书包送贴纸送门票送鼠标垫送公仔 但凡是 Spark 社区周边都!可!以!(别的社区周边我也可以去偷点) 送大佬微信送大佬钉钉号送线下活动前排位置送不打码资源送一手招聘信息送简历绿色通道送劲爆八卦 按劳送礼,多劳多得,绝对公平。 也就是整理整理稿子,排排版,有活动时协助维持一下纪律。 可能是21世纪唯一不看颜值只看人品的招募。 有兴趣加志愿打工钉钉...
- 下一篇
深入研究Apache Spark 3.0的新功能
直播回放:https://developer.aliyun.com/live/2894 以下是直播内容精华整理。 Spark3.0解决了超过3400个JIRAs,历时一年多,是整个社区集体智慧的成果。Spark SQL和Spark Cores是其中的核心模块,其余模块如PySpark等模块均是建立在两者之上。Spark3.0新增了太多的功能,无法一一列举,下图是其中24个相对来说比较重要的新功能,下文将会围绕这些进行简单介绍。 一、Performance 与性能相关的新功能主要有: Adaptive Query Execution Dynamic Partition Pruning Query Complication Speedup Join Hints (一)Adaptive Query Execution Adaptive Query Execution(AQE)在之前的版本里已经有所实现,但是之前的框架存在一些缺陷,导致使用不是很多,在Spark3.0中Databricks(Spark初创团队创建的大数据与AI智能公司)和Intel的工程师合作,解决了相关的问题。 在Spark...
相关文章
文章评论
共有0条评论来说两句吧...