前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MLSQL 语法扩展设计

MLSQL 语法扩展设计

作者头像
用户2936994
发布2019-04-18 16:23:57
4830
发布2019-04-18 16:23:57
举报
文章被收录于专栏:祝威廉祝威廉

前言

MLSQL 语法非常简单,只有:

  1. set
  2. select
  3. train/run/predict
  4. save
  5. load

等几种语法。因为MLSQL为了简单起见,对扩展新语法是非常抵触的。比如,用户很希望能查看一张表的schema,在MLSQL中需要这么用:

代码语言:javascript
复制
run command ShowTableExt.`tableName`;

比如杀一个任务,需要这么用:

代码语言:javascript
复制
run command Kill.`jobId`;

虽然已然很简单,但是用户觉得还是不够简洁,用户期待如下的表示方法:

代码语言:javascript
复制
show tableName;
kill jobid;

但是如果加这些,就意味添加了新的语法,需要修改语法文件。那如何简单解决这个冲突呢?

解决方案

我们知道在MLSQL里,ET是扩展性最好的东西,任何功能都可以通过ET来实现。MLSQL内部比如Python支持等也是通过ET实现的。ET对应的其实就是train/run/predict 三个关键字。前面的show table schema, kill job也是通过ET实现的。但是他的语法在简单的场合确实不够简洁。 在不增加新语法的情况下,我们其实可以给一段代码片段重新命名从而实现新的功能。

比如前面的Kill,我们可以这样做:

代码语言:javascript
复制
set kill = '''
-- 注意结尾没有分号
run command Kill.`{}`
''';

接着,我们就获得了一个新的命令,叫kill了,具体这么使用:

代码语言:javascript
复制
!kill "groupid";

MLSQL 如果发现以! 开始,则认为是一个命令的开始,然后会寻找该命令的定义,然后执行对应的kill内容。以! 开始其实是受到Rust 的macro 调用的启发,Rust 采用以!结尾来区分宏和普通方法的调用。MLSQL以!开始作区分命令和其他脚本指令的调用。

结束语

MLSQL 还提供了include语法,从而实现脚本更好的复用。通过新的类似“宏”的支持,可以让脚本获得更好的复用性。不过这种复用性也让脚本更加复杂,用户应当尽量不要使用而应该去使用系统提供了一些内置的“宏”,比如 !desc 查看表结构, !kill 杀任务等。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 解决方案
  • 结束语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档