实践分享| Apache Linkis自定义变量介绍

06/24 14:15
阅读数 680

1. 总述
需求背景
用户希望在写代码时,能够定义一些公共变量然后执行的时候进行替换,比如用户每天都会批量跑同一段sql,需要指定上一天的分区时间,如果基于sql去写会比较复杂如果系统提供一个run_date的变量将会非常方便使用。

目标
  • 支持任务代码的变量替换
  • 支持自定义变量,支持用户在脚本和提交给Linkis的任务参数定义自定义变量,支持简单的+,-等计算
  • 预设置系统变量:run_date,run_month,run_today等系统变量

2. 总体设计
在Linkis任务执行过程中自定义变量在Entrance进行,主要通过Entrance在任务提交执行前的拦截器进行拦截替换实现,通过正则表达式获取到任务代码中使用到的变量和定义的变量,并通过任务传入的自定义变量初始值完成代码的替换,变成最终可以执行的代码。

2.1 技术架构
自定义变量整体架构如下,用于任务提交过来后,会经过变量替换拦截器。首先会解析出所有代码中用到的变量和表达式,然后通过和系统以及用户自定义的变量初始值进行替换,最终将解析后的代码提交给EngineConn执行。所以到底层引擎已经是替换好的代码。

3. 功能介绍
Linkis支持的变量类型分为自定义变量和系统内置变量,内部变量是Linkis预先定义好的,可以直接进行使用。然后不同的变量类型支持不同的计算格式:String支持+、整数小数支持+-*/,日期支持+-。

3.1 内置变量
目前已支持的内置变量如下:

具体细节:
1、run_date为核心自带日期变量,支持用户自定义日期,如果不指定默认为当前系统时间的前一天。
2、其他衍生内置日期变量定义:其他日期内置变量都是相对run_date计算出来的,一旦run_date变化,其他变量值也会自动跟着变化,其他日期变量不支持设置初始值,只能通过修改run_date进行修改。
3、内置变量支持更加丰富的使用场景:${run_date-1}为run_data的前一天;${run_month_begin-1}为run_month_begin的上个月的第一天,这里的-1表示减一个月。

3.2 自定义变量
什么是自定义变量?先定义,后使用的用户变量。用户自定义变量暂时支持字符串,整数,浮点数变量的定义,其中字符串支持+法,整数和浮点数支持+-*/方法。用户自定义变量与SparkSQL和HQL本身支持的set变量语法不冲突,但是不允许同名。如何定义和使用自定义变量?如下:
  
  
  
  1. ## 代码中定义,在任务代码前进行指定

  2. sql类型定义方式:

  3. --@set f=20.1

  4. python/Shell类型定义如下:

  5. #@set f=20.1

  6. 注意:只支持一行定义一个变量

使用都是直接在代码中使用通过  {varName表达式},如${f*2}

3.3 变量作用域
在linkis中自定义变量也有作用域,优先级为脚本中定义的变量大于在任务参数中定义的Variable,大于内置的run_date变量。任务参数中定义如下:
  
  
  
  1. ## restful

  2. {

  3. "executionContent":{"code":"select \"${f-1}\";","runType":"sql"},

  4. "params":{

  5. "variable":{f:"20.1"},

  6. "configuration":{

  7. "runtime":{

  8. "linkis.openlookeng.url":"http://127.0.0.1:9090"

  9. }

  10. }

  11. },

  12. "source":{"scriptPath":"file:///mnt/bdp/hadoop/1.sql"},

  13. "labels":{

  14. "engineType":"spark-2.4.3",

  15. "userCreator":"hadoop-IDE"

  16. }

  17. }

  18. ## java SDK

  19. JobSubmitAction.builder

  20. .addExecuteCode(code)

  21. .setStartupParams(startupMap)

  22. .setUser(user)//submit user

  23. .addExecuteUser(user)//execute user

  24. .setLabels(labels)

  25. .setVariableMap(varMap)//setVar

  26. .build


4. 最后
社区当前正在举办征文大赛,最高奖励可得 “ 1000元京东卡+500元社区礼品 ”哦,点击下图查看详情


— END —

如何成为社区贡献者

 官方文档贡献。发现文档的不足、优化文档,持续更新文档等方式参与社区贡献。通过文档贡献,让开发者熟悉如何提交PR和真正参与到社区的建设。参考攻略:保姆级教程:如何成为Apache Linkis文档贡献者


 代码贡献。我们梳理了社区中简单并且容易入门的的任务,非常适合新人做代码贡献。请查阅新手任务列表:https://github.com/apache/incubator-linkis/issues/1161


 内容贡献:发布WeDataSphere开源组件相关的内容,包括但不限于安装部署教程、使用经验、案例实践等,形式不限,请投稿给小助手。例如:


 社区答疑:积极在社区中进行答疑、分享技术、帮助开发者解决问题等;


 其他:积极参与社区活动、成为社区志愿者、帮助社区宣传、为社区发展提供有效建议等;

本文分享自微信公众号 - WeDataSphere(gh_273e85fce73b)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部