引言
转眼间,距离DataWorks产品问世已经过了多年的时间。自2009年起步以来,这款由阿里云精心打造的一站式智能大数据开发治理平台,经历了不断的迭代与进化,逐渐成为众多企业在数字化转型过程中不可或缺的利器。它不仅承载了阿里巴巴集团15年来在大数据领域的深厚积累,还深度适配了包括MaxCompute、EMR、Hologres、Flink以及PAI在内的数十种大数据和人工智能计算服务。
我作为一个开发者,也已经与DataWorks共同走过了近四年光阴,这期间我学习了大量的DataWorks最佳实践,并结合自身的工作经验,逐步掌握了从数据集成、ETL开发到数据分析及治理的全流程技能。
历史最佳实践实验文章如下:
开源大数据分析实验(3)——简单用户画像分析之配置数据质量监控
开源大数据分析实验(4)——简单用户画像分析之数据可视化展现
基于DataWorks+MaxCompute的公共电影票房数据预处理实践
基于DataWorks+MaxCompute的企业本地数据上云实践
基于DataWorks+MaxCompute的员工配送业务绩效考核分析
基于MaxCompute+DataWorks离线同步某电商用户购买记录实践
这里,我们再一起回顾一下经典案例——基于DataWorks+MaxCompute的公共电影票房数据预处理全过程
基于DataWorks+MaxCompute的公共电影票房数据预处理实践
实验内容
对MaxCompute数仓公共数据进行预处理,主要对maxcompute_public_data.dwd_product_movie_basic_info(电影基本信息,包含影片名、导演、编剧、主演、影片类型等基础信息)表和maxcompute_public_data.ods_product_movie_box(电影票房基本信息,包含影片名、当日票房、累计票房等信息)进行操作,为后期数据分析做准备工作。
实现思路
(1)登录DataWorks选择公共数据集
(2)对票房数据进行数据清洗
(3)对票房数据进行数据转换
(4)保存查询后的结果数据
实验步骤
1.搜索框搜索Dataworks,进入DataWork后,我们需要选择Region区域为【华东2(上海)】(说明:地域请根据实际情况选择,如果不在对应地域的话无法查看到项目列表)
2.如图点击【SQL查询】菜单。
进入到如下页面:
如图点击图标添加公共数据集
在列表中找到公共数据集,点击【添加】
在左侧会出现【公共数据】代表添加公共数据集成功。
下面使用两条SQL语句来体验查询公共数据集里的数据,分别查询2020年手机号归属地基本信息以及查看北京市各运营商的手机号段数量。
如图点击【+】调出SQL编辑器。
在编辑器里输入如下SQL语句:
SELECT *
FROM maxcompute_public_data.dwd_product_phoneno_basic_info_2020
LIMIT 200
;
在执行SQL前需要先授权,否则无法执行。
如图点击图标进行授权。
在【成本预估】弹窗点击【运行】按钮
在下方的【结果】选项卡里出现对应的查询结果
复制下列语句进行搜索:
SELECT isp AS "运营商"
, COUNT(phoneno) AS "手机号段数量"
FROM maxcompute_public_data.dwd_product_phoneno_basic_info_2020
WHERE city = "北京"
GROUP BY isp
ORDER BY "手机号段数量" DESC
LIMIT 200
;
3.公共电影票房数据集解读。
在maxcomput公共数据里出现含有movie的数据表,dwd_product_movie_basic_info和ods_product_movie_box为本次实验所需要查询的数据表。
切换至数据开发下。
点击【临时查询】,新建ODPS SQL为movie。
数据表maxcompute_public_data.dwd_product_movie_basic_info。执行如下语句,可查看dwd_product_movie_basic_info表结构。
SHOW CREATE TABLE maxcompute_public_data.dwd_product_movie_basic_info;
电影基本信息,包含影片名、导演、编剧、主演、影片类型等基础信息。
数据表maxcompute_public_data.ods_product_movie_box。
SHOW CREATE TABLE maxcompute_public_data.ods_product_movie_box;
电影票房基本信息,包含影片名、当日票房、累计票房等信息。
4.数据清洗。
执行如下语句,点击的运行图标。
SELECT movie_name -- 电影名称
,director -- 导演
,scriptwriter -- 编剧
,area -- 制片地区/国家
,actors -- 主演
,type -- 类型
,movie_length -- 电影长度
,movie_date -- 上映日期
,movie_language -- 语言
,imdb_url -- imdb号
,ds
FROM maxcompute_public_data.dwd_product_movie_basic_info
WHERE ds = MAX_PT('maxcompute_public_data.dwd_product_movie_basic_info')
LIMIT 200;
运行结果如下。
对maxcompute_public_data.dwd_product_movie_basic_info表进行数据清洗处理,去除没有制片地区/国家的数据。
选中maxcompute_public_data.dwd_product_movie_basic_info表,修改SQL语句,增加筛选条件去除没有制片地区/国家的数据。(area != ‘’ 代表area字段下面的值不允许是空值)
SELECT movie_name -- 电影名称
,director -- 导演
,scriptwriter -- 编剧
,area -- 制片地区/国家
,actors -- 主演
,type -- 类型
,movie_length -- 电影长度
,movie_date -- 上映日期
,movie_language -- 语言
,imdb_url -- imdb号
,ds
FROM maxcompute_public_data.dwd_product_movie_basic_info
WHERE ds = MAX_PT('maxcompute_public_data.dwd_product_movie_basic_info')
AND area != ''
LIMIT 200;
查询动作片的票房数据。
从票房数据里筛选出前200条动作片的数据。
修改SQL语句如下:(area!=’’代表area字段不为空的数据,并列条件 AND type = ‘动作’代表查询类型为动作的数据,同样返回前200条数据)
SELECT movie_name -- 电影名称
,director -- 导演
,scriptwriter -- 编剧
,area -- 制片地区/国家
,actors -- 主演
,type -- 类型
,movie_length -- 电影长度
,movie_date -- 上映日期
,movie_language -- 语言
,imdb_url -- imdb号
,ds
FROM maxcompute_public_data.dwd_product_movie_basic_info
WHERE ds = MAX_PT('maxcompute_public_data.dwd_product_movie_basic_info')
AND area != ''
AND type = '动作'
LIMIT 200;
5.数据转换。
公共数据集中描述电影票房的表一共有2个,dwd_product_movie_basic_info里的movie_name和ods_product_movie_box里的moviename都保存的是电影名称信息,我们可以对两张表的数据进行数据转换,将相同电影名称的两条数据合并转换为一条数据。
修改SQL语句,代码如下:
WITH
a as(SELECT ds,moviename,sumboxoffice,DENSE_RANK() OVER (PARTITION BY ds ORDER BY CAST(sumboxoffice AS DOUBLE) DESC) AS srank,boxoffice,irank FROM maxcompute_public_data.ods_product_movie_box WHERE ds>='20170128' AND ds<='20170203' )
,b as (SELECT movie_name,director,type ,area, actors,movie_language ,ROW_NUMBER() OVER (PARTITION BY movie_name ORDER BY TYPE DESC) AS nums FROM maxcompute_public_data.dwd_product_movie_basic_info WHERE ds>='20170128' AND ds<='20170203' )
,c as (SELECT b.movie_name,b.director,b.type ,b.area, b.actors,b.movie_language FROM b WHERE b.nums=1)
SELECT a.ds AS 放映日期
,a.moviename AS 影片名
,a.irank AS 当日票房排名
,a.boxoffice AS 当日票房万
,a.srank AS 总票房排名
,a.sumboxoffice AS 总票房万
,c.director AS 导演
,c.type AS 电影类型
,c.area AS 制片地区
,c.actors AS 主演
,c.movie_language AS 影片时长
FROM a
LEFT JOIN c
ON a.moviename = c.movie_name;
上述语句主要用了SQL的WITH AS 和JOIN语法。
WITH AS是SQL子查询的一种语法,支持创建不同的临时表。
JOIN语法的作用是合并表,有LEFT JOIN(左连接),RIGHT JOIN(右连接), INNER JOIN(内链接)
ON一般配合JOIN使用,代替WHERE的功能,定义查询条件。
如代码所示,使用WITH AS 创建了a,b,c三个临时表,同时对三个表进行做链接,合并的条件是两个表的电影名称一致。
选中SQL语句,点击【运行】图标按钮。
DataWorks助力企业大数据开发与治理
说一下比较真实的体验,也算是个人使用四年来的一些心得吧,首先,要说这款工具有不有用,我给出的答案会是非常有用!
在这四年里,DataWorks成为了我日常工作中必备的一部分,帮助我们团队解决了许多数据处理上的难题。记得最初接触DataWorks时,只知道其功能强大,特性丰富,但是开始上手时真的用了比较久的时间才熟悉(界面布局复杂、专业术语众多,确实感到有些不知所措),当我在完全熟悉之后,才更加切身体会到这款工具所带来的巨大便利与效率提升。这里确实也得感谢阿里云官方在不断优化改进产品和相关文档,也感谢社区的问答小伙伴们能帮忙解决问题。
随着时间推移,我对DataWorks的理解逐渐加深,也开始意识到它不仅仅是一个简单的数据处理平台,而是一个集成了多种先进技术和服务的一站式解决方案。在进行大规模数据集成时,它可以轻松连接并同步来自不同系统的异构数据源;而在开发阶段,则提供了从SQL脚本编写到复杂工作流编排等一系列工具,极大地简化了开发流程。更重要的是,DataWorks内置的数据治理功能使得我们可以更好地管理和优化数据资产,确保数据质量的同时提高了分析结果的准确性。
在实际应用中,DataWorks的强大之处在于其能够支持复杂的业务逻辑和多样的计算需求。当我们需要处理海量的日志文件或交易记录时,通过配置数据集成任务,可以高效地将这些数据同步到MaxCompute或其他计算引擎中进行进一步的清洗、转换与分析,并为后续的数据挖掘奠定基础。
目前,DataWorks已经成为我们数据管理的核心工具,帮助我们构建了一个高效、规范且安全的大数据处理体系,确保了从数据采集、清洗、开发、调度到服务化的全链路顺畅运行。
新版数据开发Data Studio体验测评
说起这一块在公测后我确实都没有使用过,也是第一次知道更新了智能助手 Copilot的功能
我们进入DataWorks产品界面:https://www.aliyun.com/product/bigdata/ide ,进入控制台界面,此时会自动跳出一个公测的邀请,点击接受
到了这个界面有些一头雾水了,还是回看一下更新公告,理清这三者的关系,目前不太确定是不是同一次更新的功能
找了一下,发现是今年9月份开始公测的,那么DataWorks全新数据处理和分析环境Notebook,及智能助手 Copilot应该都是这一次更新的
清楚了这一点之后,我们回到DataWorks控制台中,找到工作空间列表,选择已创建的工作空间,单击操作列的【快速进入 > 数据开发(新版)】,进入Data Studio。
点击立即体验
需要注意的是当前Data Studio产品公测地域只有华东1(杭州)、华东2(上海)、华北2(北京)、华南1(深圳),作者使用的地域为华东2(上海)
DataWorks Copilot简介
DataWorks Copilot,DataWorks智能助手,它能够根据自然语言快速完成多种代码相关操作及DataWorks产品操作。使用DataWorks Copilot,可帮助您轻松、高效、便捷地完成数据ETL及数据分析工作,节省大量时间和精力。
点击展开侧边栏,选择【Data Studio数据开发】
在如下界面中,我们可以看到右上角内置的【DataWorks Copilot】
我们新建临时查询
进入查询中,Ctrl+I快捷键启动,可直接调出对话框
给出prompt如下:
创建一个会员注册信息表
可以看到直接给出了创建会员注册信息表的SQL语句
点击接受可以直接将代码应用到编辑器中
在创建完会员注册信息表后,随机增加一些数据
点击接受后则会默认增加到刚才的语句下面
而当我们想手动修改代码时,Copilot会根据获取到的上下文信息,对正在编写的SQL进行代码补全,按下TAB键可以接受补全结果,按下CTRL + →,可选择接受部分结果,按下ESC键则放弃补全结果。
但是值得注意的是,此处的代码补全貌似仅能在项目创建完成后且执行批量的操作语句或涉及到重复对象比较多时才能触发(可能是此时AI才能较好的判定出你的意图) , 一些简短的语句无法触发自动补全功能
除去行内的编码生成外,也可以直接选择一段SQL语句,右键选择Copilot,会有如下五个选项:
其中,SQL Chat就是我们刚才快捷键启用的功能,这里也不过多赘述了
而下面的SQL生成、SQL纠错、生成注释、SQL改写就类似于其附加的专业Agent,他们各自擅长对应的领域
选择SQL纠错时,会直接自动对选中的代码段进行排错,并生成优化后的代码段
SQL纠错
选择生成注释时,可按要求对代码段中的语法进行解释,此处我给出的prompt是解释字段的含义
生成注释
选择SQL改写时,可按要求对代码段进行局部修改,比如说部分字段的新增、删除等等
SQL改写
而在右侧栏,我们同样可以展开Copilot Chat功能界面,同其进行对话聊天
点击这个 / ,我们可以看到Chat界面功能更加丰富
除去常见的功能外,此处还内置有快捷找表和创建API功能,确实是比较新颖了
顾名思义,快捷找表就是帮助使用者能在海量数据表中根据对应特征词快速查找到数据表,一般而言,生产环境数据表都是至少百来张的,这个功能的重要性也不言而喻了
而创建API就比较厉害了,可以直接通过对话来创建一个共享数据的接口
我给出prompt如下:
帮助我创建一个API服务,以共享test表的数据
我们只需要依次填入API名称、API地址、目标文件夹、描述,就可以快速创建一个API接口,体验真的比老版本好太多了
DataWorks Notebook简介
DataWorks Notebook是智能化交互式数据开发和分析工具,能够面向多种数据引擎开展SQL或Python分析,即时运行或调试代码,获取可视化数据结果。同时,DataWorks Notebook能够与其他任务节点混合编排为工作流,提交至调度系统运行,助力复杂业务场景的灵活实现。
我们点击手动业务流程,创建一个新流程,并新建节点:
也是经典的工作流(Workflow)模式,支持以业务视角通过可视化拖拽的方式编排多种不同类型的数据开发节点
按照如下步骤依次创建节点:
找到需要建立依赖关系的两个节点,鼠标hover到其中一个节点下边缘的中间位置,当出现 + 后,开始拖动鼠标,将箭头拖动至另外一个节点后松开
这里因为没有涉及到具体的业务,所以仅作技术上的学习,再加上这一块周周本来并不擅长,也不给大家献丑了
总结
不得不说,阿里云的创新能力还是太强了,搞数据管理和运维这块确实是非常需要一个智能助手,这下好了,操作系统里出了OS Copilot ,数据治理平台出了DataWorks Copilot,皆大欢喜!
不过对比OS Copilot的话,DataWorks Copilot的限制其实还是有一些大的
就是说单纯作为DataWorks的智能助手是比较合格的,但是无法像OS Copilot那样做成开源的去直接集成到一些数据库软件里,这也算是一点遗憾吧!
就这次版本功能更新而言,我个人是觉得挺喜欢的,当然,因为时间关系,我也仅测试了与工作关联较大的DataWorks Copilot功能,其他的暂时还未体验,希望各位朋友也能够多多分享自己的使用心得和体验!