一般而言,分析师交付的自己工作成果的方式有:
这五种应该是比较普及的。如果分析师所在公司数据平台比较成熟,也可以直接:
简单解释下,表单交付是指将SQL语句转化为表单。在MLSQL里其实非常容易做到这点,基本不会遇到任何困难。表单交付是一个极为优秀的交付方式,用户得到不再是数据,而是一段计算逻辑,但用户看到的交互形态是表单,而且用户有一定的自由度。这个是我非常推荐的一种交付方式。
API交互顾名思义就是交付一个接口。文件交付则是在数据平台可自动生成数据的现在链接地址。
然鹅,今天我们会提供一个全新的交付方式,当当当,全新闪亮登场(:
命令
该功能为MLSQL原生支持。
我们有一条SQL语句如下:
select "hello world" as value as output;
执行后的结果如下:
虽然简单,但毕竟还是标准的SQL语句,用户需要学习。所以能不能搞简单点? 把这条SQL简化成一条命令? 答案是阔以:
set hello='''
select "hello world" as value as output
''';
!hello;
设置一个变量,然后把SQL语句放到这个变量里面。注意最后一句不需要加分号。
接着就可以使用!
执行这个变量。
最后输出结果:
如果仅仅是这样静态执行,没啥意思。因为用户没有交互,只能傻傻的执行下这个命令。如果用户想打印出 hello,william
呢? 没问题,MLSQL支持占位符对应的命令行。我们稍稍修改下前面的语句:
set hello='''
select "hello {}" as value as output
''';
!hello william;
其中,SQL语句中的{}为占位符,MLSQL会将 !hello 后面的参数按位置放进去,结果如下:
乌拉,现在,我们成功提供了一个!hello 命令,并且用户可以传递参数改变我们的SQL了。
分析师可以将自己的hello命令放到一个单独的目录下,下图是我设计的目录:
其中hello.mlsql的内容如下:
set hello='''
select "hello {}" as value as output
''';
用户需要使用时,只要知道你的项目路径名即可,比如main.mlsql想要用你的hello命令,这样就可以:
include command_demo.`commands.hello.mlsql`;
!hello william;
大家看了hello world,可能会觉得这有啥用。本质上命令交付和表单交互是一致的,都是交付计算逻辑,但用户使用上会更简单。表单肯定是最简单的,但是命令对于用户门槛也很低。
假设我有一批数据(可能是数仓也可能是任何其他的数据源),我们希望提供这么一个功能,根据邮箱找到用户的完整记录。这个时候我们就可以封装一个命令叫findUserByEmail
:
set findUserByEmail='''
load hive.`db.users` as users;
select * from users where email="{}" as output
''';
!findUserByEmail "a@qq.com";
用户就可以自己使用这个命令去查找了。