今天面试了一位产品,谈了下关于产品指标的问题,说到了app功能点使用时长的指标,于是为了给以后的产品增加点难度,打算用阿里云的DataWorks来生成下使用时长,和使用人数指标。同时也熟悉使用下DataWorks
DataWorks
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。其实就是可以通过界面化的操作帮助大家能够专心致志做业务相关的数据,不用去考虑数据抽取和中间件搭建的问题。
DataWorks功能
DataWorks有如下几个功能,其中这次介绍用到了数据集成,DataStudio和运维中心。
数据集成
首先我们需要把要分析的数据导入到MaxCompute中,数据源可以是Mysql,日志,ODPS等等。这里我们的数据是从Mysql导入到MaxCompute。
如上图,我们进入到DataStudio页面,在这里我们可以创建周期性的任务流程也可创建手动执行的业务流程,本次数据导入,由于有历史数据和后面增量数据,对于历史数据我们使用手动业务流程创建,增量数据使用周期性业务流程。当然你也可以都在周期性业务流程中创建,根据变更数据过滤条件来进行区分。
手工业务流程
新建导入表
在离线同步数据前我们要先创建数据要导入到MaxCompute表,也可以导入过程中自动生成。具体创建如下,在表选中点击右键,选择创建新表,然后填写各自信息。这里要着重强调2个概念,一个是分区概念,一个是层级命名的规则。
重要概念
- 分区
分区是指可以按照分区字段进行分区,例如如果采集的是日志信息,那么我们可以按日期天数来进行分区,查询时候需要带分区字段。设置分区的表,可以设置生命周期,超过生命周期限制的表数据会被删除。
- 层级命名
可以参考这篇文章:
简单概括就是,数据分数据运营层ODS
(Operational Data Store),数据仓库层DW
(Data Warehouse),数据应用层 APP。其中数据仓库层又分
-
数据明细层:DWD(Data Warehouse Detail) 经过轻量或者未处理的数据
-
数据中间层:DWM(Data WareHouse Middle) 中间过渡数据
-
数据服务层:DWS(Data WareHouse Servce)用于提供数据服务,已经经过处理的数据
填写完表的信息后,我们将表数据提交到开发环境和生产环境。
新建离线同步
上步创建完表之后,我们进入到手动业务流程,创建自己业务流程后,再创建离线同步。
选择你的数据来源和数据去向的数据源(如果还未创建数据源,先到dataworks数据源创建数据源),这里数据来源是来自于mysql,数据去向是上一步创建的dwd表。
数据过滤:这里只需同步昨天以前的数据,所以使用了数据过滤。bizdate是dateworks中自带的数据变量,默认是昨天的日期(yyyymmdd格式)
设置完信息后,同时设置属性,数据集成资源组配置,然后我们点击保存,再点击提交,最后点击发布。之后进入到任务发布。在创建发布包的位置有刚才发布的包,点击发布。下图是我之后截的图,所以没有发布包。
发布完成后,我们进入到运维中心---手动任务运维---手动任务
这时候就能看到发布的离线同步任务,点击右键,运行,则可以运行了。运行过程中可以查看日志来看看运行情况。
周期任务集成
OK,上面完成了对老数据的数据同步,这里我们处理下增量数据的同步。首先进入到数据开发,创建自己业务流程,然后创建虚拟节点,再创建周期同步。
创建入口虚拟节点
- 选择虚拟节点,拖拽到面板
- 配置调度属性
这里我们可以加自己的参数,这里的bizdate变量是自带的,也可以自己加参数,然后通过${key}获取
- 设置完成后保存,提交。先不用发布,后续我们关联流程完毕后,再进行发布。
创建离线同步
- 创建离线同步
区别于手动流程的离线同步,这里的stat_day我们要取前一天的。刚才手工业务流程应该取<bizdate的,这里是=bizdate。 特别要注意,清理规则一定要设置成写入前保留已有数据。
- 设置调度配置
此步骤同虚拟节点,设置完毕后保存,提交,不发布。
到这里数据集成我们就完毕了,下面进入到数据分析和导出。
数据分析及输出
数据分析及输出,也分为对历史记录的手工业务处理和周期任务处理。
创建分析结果数据表
在创建流程前,我们需要创建数据分析表,这里我们创建两个表,一个用于统计时长dwstime表和统计人数dwscount表。创建流程同上面创建dwd表。
手工业务流程
这里我们是通过sql语句,即数据开发,来将手工流程集成的数据分析并导出到分析表。
- 新建sql
- 编写sql语句
下方是两个sql文件大概语句结构,大家做参考
use dataworks;
TRUNCATE TABLE dwsusecountstatistics;
WITH
durationcount AS (SELECT statday,COUNT() AS num FROM dwdtimestatistics WHERE duration>0 GROUP BY statday ORDER BY stat_day ASC )
,某某count AS (SELECT statday,COUNT() AS num FROM dwdtimestatistics WHERE 某某duration>0 GROUP BY statday ORDER BY statday ASC )
INSERT INTO dwsusecountstatistics
SELECT d.stat_day,d.num,某某.num
FROM
durationcount d,某某count 某某
WHERE d.statday = 某某.statday
use dataworks;
INSERT INTO dwstimestatistics_avg
SELECT statday,ROUND(AVG(NULLIF(duration,0)),2),ROUND(AVG(NULLIF(某某duration,0)),2) FROM dwdtimestatistics GROUP BY stat_day;
- 保存、提交、运行
无需发布,可以直接操作线上库,运行完毕后可以通过select语句检测下
周期业务流程
- 创建数据开发
在数据开发---业务流程---数据开发----新建sql
- sql语句
use dataworks;
INSERT INTO dwstimestatistics_avg
SELECT statday,ROUND(AVG(NULLIF(duration,0)),2),ROUND(AVG(NULLIF(某某duration,0)),2), FROM dwdtimestatistics WHERE statday = TOCHAR(TODATE(${bizdate},'yyyymmdd'),'yyyy-mm-dd') GROUP BY statday;
区别于手工业务流程老数据的处理,此处由于是周期性的,我们需要引入参数变量,根据日期来进行增量处理,这里我们使用了bizdate变量
需要说个小技巧,我们可以利用带参数运行sql语句,来检测参数变量使用是否正确。
- 配置调度属性
配置同虚拟节点,然后保存。
周期性任务关联
- 双击业务流程对应业务,这时候展现出业务流程面板,这时候通过拖拽和连线关联任务,最终如下图
从上到下是虚拟节点、周期性离线同步、两个sql
- 关联完毕后,从上到下进入到各个任务,进行保存,提交和发布操作
需要注意,sql语句提交会自动识别需要引入dwd表,这时候未设置关联表信息,会提示错误,我们需要在离线任务配置调度信息时,设置输出信息,如下图
- 所有任务发布完毕,去运维中心,查看周期性任务
OK,对于数据导入历史数据导入和增量导入,以及分析输出,我们设置完毕了。希望这里对大家有帮助,由于也是第一次研究,有不对的地方,欢迎大家指教~
也欢迎大家能够加入到我的星球,见证我们的成长