dolphinscheduler中,我们从一个mysql表导出数据,上传到hdfs, 再创建一个临时表,所以需要用到列名定义和列名列表。
原来定义两个变量,不仅繁锁,还容易出现差错,比如两者列序不对。
所以考虑只定义列定义变量,前一个任务从列定义中提取列名生成一个变量供后面任务使用。
一个从列定义中提取列名列表的脚本。
比如列定义:
id varchar(32) COMMENT '个人客户id',customer_id varchar(32) COMMENT '客户ID',code varchar(50) COMMENT '客户编号',name varchar(100) COMMENT '客户名称',status tinyint COMMENT '客户状态'
提取的列名列表:
t.id,t.customer_id,t.code,t.name, t.status
脚本:
columns1=`echo "${colDefs}" | sed 's/\s*\([a-z|A-Z|0-9|_]\+\)[^,]*/t.\1/g'`
echo "#{setValue(slctColums=${columns1})}"
echo "parsed columns: $columns1"
dolphinscheduler示例
后面的任务就可以用select ${slctColumns} from table1 t 使用参数了
r后记:发现有点问题如: salary decimal(28,2) COMMENT ‘可支配余月收入’,
会变成
t.salary,t.2
所以,后面再sed一次掉这种
columns1=`echo "${colDefs}" | sed 's/\s*\([a-z|A-Z|0-9|_]\+\)[^,]*/t.\1/g' | sed 's/t\.[0-9]\+,//g'`
echo "#{setValue(slctColums=${columns1})}"
echo "parsed columns: $columns1"