Python编程实践 - 使用模板生成配置文件

背景

在大数据,尤其是数据仓库领域有许多配置文件,例如ETL作业的配置。大多数的平台都可以通过Web页面或者Restful 接口的方式进行ETL作业的配置。

痛点:当需要配置大量的ETL作业时,通过Web页面配置效率低,且容易出错

虽然ETL作业的参数很多,但是需要关心往往只有几个,其它使用默认即可。因此可以使用模板,只需要修改模板中我们关心的参数即可。

实现方式

  • 制作模板文件:准备一个ETL作业的配置文件,把需要修改的参数改为 $变量名, 如,$name
  • 通过string.Template() 读取模板文件的内容
  • 通过safe_substitute() 给模板文件中的变量赋值
  • 调用Restful 接口创建ETL作业(不同平台的接口不一样,本文不做演示

详细案例

1. 制作模板文件

template.json
变量为:$dir $name $table

{
	"autoAcquireLock":true,
	"basicConfig":{
		"agency":"dgc_agency",
		"customFields":{},
		"executeUser":"",
		"instanceTimeout":0,
		"owner":"",
		"priority":0
	},
	"directory":"$dir",
	"location":{
		"x":"807",
		"y":"325"
	},
	"maskedParams":[],
	"name":"$name",
	"nodes":[
		{
			"failPolicy":"FAIL_CHILD",
			"location":{
				"x":"-160.0",
				"y":"56.0"
			},
			"maxExecutionTime":30,
			"name":"ods_merge_data",
			"pollingInterval":20,
			"preNodeName":[],
			"properties":[
				{
					"name":"scriptName",
					"value":"ods_merge_data.py"
				},
				{
					"name":"connectionName",
					"value":"bigdata_host"
				},
				{
					"name":"arguments",
					"value":"-n $table -d ${cyctime}"
				},
				{
					"name":"statementOrScript",
					"value":"SCRIPT"
				}
			],
			"resouces":[],
			"retryInterval":120,
			"retryTimes":0,
			"type":"Python"
		}
	],
	"processType":"BATCH",
	"resouces":[],
	"schedule":{
		"cron":{
			"concurrent":80,
			"dependJobs":{
				"dependFailPolicy":"FAIL",
				"dependPeriod":"SAME_PERIOD",
				"jobs":[],
				"sameWorkSpaceJobs":[]
			},
			"dependPrePeriod":false,
			"expression":"0 1 7-7/2 * * ?",
			"expressionTimeZone":"GMT+08:00",
			"startTime":"2022-02-19T17:25:54+08"
		},
		"type":"CRON"
	},
	"singleNodeJobFlag":false,
	"updateLineageInfo":false,
	"useCdmCache":false,
	"version":"1.0"
}
2. 通过string.Template() 读取模板文件的内容
file = open('template.json', encoding='utf-8')
content = file.read()
template_setting = string.Template(content)
3. 通过safe_substitute() 给模板文件中的变量赋值
name = 'example'
dir = '/opt/datawarehouse/ods'
table = 'ods_goods'
setting = template_setting.safe_substitute(name = name, dir = dir, table = table)
print(setting)
完整代码
# coding=utf-8
import string
if __name__ == '__main__':
    file = open('template.json', encoding='utf-8')
    content = file.read()
    template_setting = string.Template(content)
    name = 'example'
    dir = '/opt/datawarehouse/ods'
    table = 'ods_goods'
    setting = template_setting.safe_substitute(name = name, dir = dir, table = table)
    print(setting)
    """
    调用Restful 接口创建ETL作业
    不同平台的接口不一样,本文不做演示
    """
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修破立生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值