在 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 脚本" 节点来获取相同的信息。
  1. 获取诸如项目标识,项目名称,作业标识和作业运行标识之类的参数。 您可以通过 CEL 表达式获取这些值: ctx.scope.idctx.scope.namectx.job.idctx.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 '`
  2. 获取在指定项目中运行的作业的元数据。 使用先前命令定义的参数 proj_idjob_idrun_id
    $ jobrun=`curl --request GET "$ {CPD_URL}/v2/jobs/${job_id }/runs/$ {run_id}?job_id=$ {job_id} &amp;run_id=$ {run_id} &amp;project_id=$ {proj_id} " --header "Authorization: Bearer $ {bearer_token} "`
  3. 抽取信息。
    $ echo $jobrun|jq -r '. entity.job_run.job_name '

此示例使用 REST API 命令,但也可以使用 dsjob 。 将例程重写为包装器函数可能很有用,以便可以在整个脚本中复用这些例程。 请参阅 示例 以获取更多信息和示例。