前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MLSQL如何帮助分析师更高效

MLSQL如何帮助分析师更高效

作者头像
用户2936994
发布2019-03-29 16:13:02
3360
发布2019-03-29 16:13:02
举报
文章被收录于专栏:祝威廉祝威廉

前言

我之前写过一篇文章叫如何按程序员思维写分析师脚本,这里主要是在两方面帮助分析师:

  1. 将程序员一些较为高效的工作模式转移到分析师身上,这包括脚本片段复用,脚本include,工程项目,视图等。
  2. MLSQL平台提供这些思维的功能支持。

迄今为止,在之前文章提到的所有功能点,都已经在MLSQL中实现。当然,拥有这些还是远远不够的,因为SQL语言自身的设计和用途上的限制,导致做很多事情还是会有点力有不逮,下部分内容我们会具体举一个例子。

父子关系计算

父子关系计算指的是什么呢?譬如有一张表,数据格式如下:

代码语言:javascript
复制
{"id":0,"parentId":null}
{"id":1,"parentId":null}
{"id":2,"parentId":1}
{"id":3,"parentId":3}
{"id":7,"parentId":0}
{"id":199,"parentId":1}
{"id":200,"parentId":199}
{"id":201,"parentId":199}

这里为了简单,我们省略了其他字段,只保留了id和parentId字段。 一般而言这种结构建模了什么呢? 我们举个最简单的例子,就是运营的拉新,一般而言现在大家喜欢用拉人头模式,比如如果你邀请其他用户注册,你就能获得奖励,我们会建模这种关系,假设id是用户id, parentId是邀请该用户注册的用户。

对于后端研发而言,用这种关系表建模该模式是非常有效的。但是对于分析师而言,却有点蛋疼了。比如要实现如下诉求:

  1. 计算拉新层级。我想知道任何一个用户它的传播层级有多少。比如A拉了B,B拉了C,那么A的拉新层级就是2.
  2. 计算拉新数量。任一用户的拉新用户数(跨层级,也就是子用户的子用户的子用户都算进去)

如果用SQL只能用join来实现有限层次的计算,而且SQL代码会很ugly,并且计算量还不小。本质上,对于需要递归的计算,SQL其实不是非常适合的。 那怎么解决呢?

扩展SQL中的王者:ET

ET其实是MLSQL中 Estimator/Transformer里的缩写,我们借鉴了算法领域的Estimator/Transformer的概念,来描述解决一个特定抽象问题的模块。该模块可以使用MLSQL的扩展语法来完成。 假设我们有一个ET解决了父子计算问题,它的名字叫 TreeBuildExt,怎么在SQL中使用呢?

我们来看一个较为完整的示例:

代码语言:javascript
复制
-- 任何select SQL语句本质上都是一个Transformer,将原数据转化为一个新的形态的数据。这里,我们
-- 从originalTable 抽取了两个字段,并且将得到的新的SQL语句的结果命名为parentChildTable
select id,parentId from originalTable as parentChildTable;

-- 和传统SQL语句不通的地方是我们新增了一个run关键字,和select类似,我们使用ET TreeBuildExt
-- 对parentChildTable 进行处理,使用where条件语句设置处理他的条件
-- 处理后的结果,我们命名为result.
run parentChildTable TreeBuildExt.`` 
where idCol="id" and parentIdCol="parentId" and treeType="nodeTreePerRow" 
as result;

select * from result as output;

最后显示的结果如下:

代码语言:javascript
复制
+---+-----+------------------+
|id |level|children          |
+---+-----+------------------+
|200|0    |[]                |
|0  |1    |[7]               |
|1  |2    |[200, 2, 201, 199]|
|7  |0    |[]                |
|201|0    |[]                |
|199|1    |[200, 201]        |
|2  |0    |[]                |
+---+-----+------------------+

该ET会计算每个元素的层级以及所有子元素。这样分析师只要学会一个类似select语句的新statement,就能用一条语句完成以前很难完成的任务,是不是很酷?

研发可以开发非常多为分析师定制的ET模块,从而高效的提高分析师的工作效率,也让很多”不可能“变成”可能“。值得一提的是,分析师做不了的工作,不需转交给研发,而是由研发开发ET,从而然工作职责更加清晰,让分析师的边界更加宽广。

总结

关于设置本地开发环境,可参看MLSQL 开发环境配置指南。 关于ET具体开发指南,参看MLSQL-ET开发指南

如果大家想体验MLSQL产品,可点击一键体验全套MLSQL产品,或者自助完成编译部署

更多内容请关注专题 以及MLSQL官方文档

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.03.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 父子关系计算
  • 扩展SQL中的王者:ET
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档