如何按程序员思维写分析师脚本

前言

今天无意在在某群里,看到一个很复杂的SQL脚本,join很多,子查询很多,union很多,case when也很多。然后就让我们负责分析师脚本管理的同事给我看了下我们分析师的脚本,我发现随便一个竟然都超了三四百行。这脚本维护起来应该是个噩梦。如果要让一个东西好维护,好管理,那一定需要项目化,如何项目化一个脚本呢?

这个其实很像前端,原先前端就是一个html页面,有html,javascript,css等,然后一开始大家就是在一个页面写完所有逻辑,后面出现了Vue,react等框架,把前端单一页面开发项目化了。我们知道,表现层的东西是多变的,难以复用的,比如html代码片段就比较难以复用。同样的,SQL具有很强的表达能力,以及比编程语言更低的使用门槛,但是复用难度也是比较大的。不过你愿意,总是可以的。

设计

针对前面的问题,我设计了一套项目体系,可以让分析师以较为结构化和项目化的思维去完成一个脚本的编写。当然,这个是运行在我们内部的Skone系统之上的,底层的DSl语法则是MLSQL,引擎是StreamingPro。

项目目录结构为如下:

image.png

这是A分析师的一个项目目录,叫analyser。 里面分成了四个子目录。

  1. function 可以复用脚本片段,如果分析师还会写python,则包含udf函数。
  2. entity_tables 分析师使用到的落地中间表。
  3. virtual_tables 分析师使用到的虚拟中间表。
  4. job 分析师任务脚本集合,一个job就是完成一个功能点,比如出一张报表。

function

我们先来看function目录:

image.png

里面包含两种类型的的可复用脚本。第一个是SQL代码片。比如上图里的,我们经常会反复用一个case when,这个时候就可以抽象成一个代码片段。其实说白了就是做了个名字映射。

使用时,可以这样:

image.png

另外一个就是如果分析师会一些脚本,那么可以整理自己一些常用的函数库。

image.png

使用时可以这样:

image.png

virtual_tables

我们知道,在分析师实际写脚本的时,往往为了完成一个结果,会需要产生大量的中间表,不同的job可能会有依赖同一批中间表。virtual_tables目录使得分析师可以统一管理自己的经常使用的中间表。

image.png

这张图例,就是产生了一张表明为 vistor_count_from_three_channes的表。

job

job 目录则是分析师真正完成工作的地方。通常,分析师会include function/virtual_tables里函数或者表在最终job里使用,比如:

image.png

这个过程,分析师导入了votes表,shares表,然后union 了他们,最后追加到hive表里。

总结

通过这套体系,强化了分析师们的抽象和复用能力,也简化了脚本复杂度。分析师自己就很方便构建常用的虚拟表集合,对于经常用到的一些处理逻辑,也可以进行很好的封装。而如果分析师熟悉python脚本,也能更好的进行自主开发。

我们还可以让分析师把项目一键发送给数仓工程师,让他们完成最后的上线过程。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT大咖说

一线工程师宝贵经验:架构的深入思考 From FunData

内容来源:之前作者写了一篇《FunData — 电竞大数据系统架构演进》的文章,传送门:http://t.cn/RdgKWGW 觉得没有深入写出一些深层次的东西...

1153
来自专栏解密云服务

掀起“公有云对象存储服务”的面纱(系列2)

内容题记:公有云对象存储服务会写成一个系列,从使用者(企业IT经理)的视角出发,分享一下从选择服务商到深度使用上的一些心得。上次内容主要关于厂商选取和数据上云这...

41812
来自专栏小程序服务商

附近的小程序怎么开通 开发使用小程序需要域名空间服务器吗

1、附近小程序优先展示在最上面,在微信搜索的时候也会优先展示附近的小程序,这能提供不小的流量。

4240
来自专栏ThoughtWorks

TW洞见 | 刘冉:QA应该更新的测试工具

作为一名QA,过去一年是我的软件质量知识体系和自动化测试知识体系收获最丰的一年,让我对于软件质量和自动化测试有了一个更高层次的认识。所以我写下了一些自己更新了的...

3907
来自专栏Java架构

阿里java架构师:微服务写的最全的一篇文章

今年有人提出了2018年微服务将疯狂至死,可见微服务的争论从未停止过。在这我将自己对微服务的理解整理了一下,希望对大家有所帮助。

1.8K3
来自专栏令仔很忙

Hybird App(一)----第一次接触

之前一直在做JAVA的项目,最近要开发移动端,对App的开发刚开始的时候是没有任何概念的,有接触也就是玩手机用过的N多App,这算是真正意义山的第一次和App...

1481
来自专栏BestSDK

好的产品诞生全过程:每个环节都细致入微

当我们提到一些常见的功能时,可以一笔带过,简单的描述一下就可以了,比如:对于微信登录,手机号注册。 那如果我们提到的是一些比较复杂的,具备一定创造性功能的时候,...

2965
来自专栏程序员互动联盟

开发一个网站需要掌握多少技术?

在众多纷纭的计算机的岗位中,其中有一个岗位叫做“web服务器开发”,就是我们经常说的web后端;也许有过一些工作经验的开发者对于这个web服务器的开发已经很熟悉...

3836
来自专栏北京马哥教育

20款开发运维必备的顶级工具

开发运维工具与软件开发领域的最佳实践密切相关,也与必要的规范密切相关。在整个开发生命周期涉及到一大批新旧工具,从规划、编码、测试、发布到监控。本文介绍你应该考...

4896
来自专栏QQ会员技术团队的专栏

大规模排行榜系统实践及挑战

在过去的一年中,排行榜系统从无到有,接入的业务从单一的QQ会员到企鹅电竞动漫等20几个各类业务,接入的排行榜数实现了从几个到数万的突破,单个排行榜用户数最大90...

3.7K1

扫码关注云+社区

领取腾讯云代金券