在 DataStage 中替换 BASIC 例程
要替换 BASIC 例程,请将例程代码重写为使用 dsjob CLI 或 REST API 调用的脚本。 将其作为 "运行散列" 脚本节点添加到管道流。
认证令牌
要开始使用 REST 或 CLI 上的 API 服务器,请获取服务器的认证令牌。
有关更多信息,请参阅生成用于认证的 API 密钥。
假定 CPD UI URL 的格式为 https://cpd-ds.apps.yourcompany.com,请使用以下代码获取认证令牌。
iam 令牌:
export CPD_URL=https://cpd-ds.apps.yourcompany.com
export USERNAME=<your login user>
export PASSWORD=<your login password>
iamtoken=`curl -k -s -X POST -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" -d "grant_type=password&username=${USERNAME}&password=${PASSWORD}&scope=openid" ${CPD_URL}/idprovider/v1/auth/identitytoken | jq .access_token | cut -d\" -f2`认证令牌:
bearer_token=`curl -k -s -X GET ${CPD_URL}/v1/preauth/validateAuth -H "username: ${USERNAME}" -H "iam-token: ${iamtoken}" | jq .accessToken | cut -d\" -f2`
替换例程
以下 BASIC 例程获取作业的名称:
# ** Jobname = DSGetJobInfo ( DSJ.ME, DSJ.JOBNAME )您可以通过编写使用 REST API 的脚本并将其添加到 "运行 Bash 脚本" 节点来获取相同的信息。
- 获取诸如项目标识,项目名称,作业标识和作业运行标识之类的参数。 您可以通过 CEL 表达式获取这些值:
ctx.scope.id,ctx.scope.name,ctx.job.id和ctx.job_run.id,也可以使用 REST API 执行此操作,如以下命令中所示。 此示例假定项目的名称为project1。项目标识
$ project=`curl --request GET "$ {CPD_URL}/v2/projects?name=project1 " -H "Authorization: Bearer $ {bearer_token} " -k -s ` $ proj_id=`echo $project | jq -r '.resources|.[0]. metadata.guid '`作业标识
$ joblist=`curl --request GET "$ {CPD_URL}/v2/jobs?project_id=${proj_id }" --header "Authorization: Bearer $ {bearer_token} " -k -s ` $ job_id= `echo $joblist | jq -r '.results[].metadata|select(.name=="testjob"?) |.asset_id'`运行标识
$ runlist=`curl --request GET "$ {CPD_URL}/v2/jobs/${job_id }/runs?project_id=$ {proj_id} " --header "Authorization: Bearer $ {bearer_token} " -k -s ` $ run_id= `echo $runlist|jq -r '.results[]|select(. metadata.description =="Initial run"?) |. metadata.asset_id '` - 获取在指定项目中运行的作业的元数据。 使用先前命令定义的参数 proj_id, job_id和 run_id 。
$ jobrun=`curl --request GET "$ {CPD_URL}/v2/jobs/${job_id }/runs/$ {run_id}?job_id=$ {job_id} &run_id=$ {run_id} &project_id=$ {proj_id} " --header "Authorization: Bearer $ {bearer_token} "` - 抽取信息。
$ echo $jobrun|jq -r '. entity.job_run.job_name '
此示例使用 REST API 命令,但也可以使用 dsjob 。 将例程重写为包装器函数可能很有用,以便可以在整个脚本中复用这些例程。 请参阅 示例 以获取更多信息和示例。