0 / 0
資料の 英語版 に戻る

DataStage® におけるルーチン置換の例

最終更新: 2025年3月12日
DataStage でのルーチン置換の例

以下の例は、 dsjob CLI または REST API を使用して BASIC ルーチンを再作成する方法を示しています。 ルーチンをラッパー関数として書き直して、後でスクリプトで呼び出すか、サンプル関数の本体を単独でコマンドとして使用することができます。

プロジェクト ID の取得

CEL 式:

ctx.scope.id

REST API:

この例では、プロジェクトの名前は「project1」です。 プロジェクトの名前に置き換えます。
$ project=`curl --request GET "${CPD_URL}/v2/projects?name=project1"-H "Authorization:ベアラ ${bearer_token}"-k -s`
$ proj_id=`echo $project | jq -r '.resources|.[0].metadata.guid'`
$echo $proj_id 
dsjob CLI:
project=`cpdctl dsjob list-projects --with-id |grep project1`
proj_id=`echo ${project#*|}`
$echo $proj_id
ジョブ ID の取得

CEL 式:

ctx.job.id
REST API:
$ joblist=`curl --request GET "${CPD_URL}/v2/jobs?project_id=${proj_id}" "--header "Authorization:ベアラ ${bearer_token}"-k -s`
$echo $joblist | jq 
このコマンドは, ジョブのリストを印刷します。 以下のコマンドで、「testjob」をジョブの名前に置き換えます。
$ echo $joblist|jq -r '.results[].metadata|select(.name=="testjob"?) |.asset_id'
dsjob CLI:
job=`cpdctl dsjob list-jobs --project-id ${proj_id} --with-id | grep testjob`
$echo $job
testjob |317dce0d-247a-48aa-bd96-f4ec44cb39fc
job_id=`echo ${job#*|}`
$echo $job_id
ジョブ実行 ID の取得

CEL 式:

ctx.job_run.id
REST API:
$ runlist=`curl --request GET "${CPD_URL}/v2/jobs/${job_id}/runs?project_id=${proj_id}"--header "Authorization:ベアラ ${bearer_token}"-k -s`
$echo $runlist
これにより、ジョブ実行のリストが印刷されます。 説明、作成時刻、またはその他のメタデータに基づいて実行を選択します。
$ echo $runlist|jq -r '.results[]|select(.metadata.description=="Initial run"?)
dsjob CLI:
$ cpdctl dsjob list-jobruns --project-id ${proj_id} --id $job_id --detail $job_id
DSAddEnvVar
REST API:
#!/bin/sh

# param1: 環境名
# param2: 新規変数名
# param3: 新しい変数値
DSAddEnvVar()
{
envs=`curl -k -s --request GET "${CPD_URL}/v2/environments?project_id=${proj_id}"--header "Authorization:ベアラ ${bearer_token}"`
env_id=`echo $envs|jq -r ".resources[] | select(.metadata.name=="$1") | .metadata.asset_id"`

existingvars=`echo $envs|jq -r ".resources[] | select(.metadata.name=="$env_name") | .entity.environment.environment_variables"`
updatevars=`echo $existingvars |jq ".$2 = \"$3\""`
data="{"/entity/environment/environment_variables}":${updatevars}}」"

curl -k -s --request PATCH "${CPD_URL}/v2/environments/${env_id}?project_id=${proj_id}&environment_guid=${proj_id}"--header 'Content-Type: application/json' --header "Authorization:ベアラ ${bearer_token}"--data-raw "${data}"
}
dsjob CLI:
#!/bin/sh

# param1: 環境名
# param2: 新規変数名
# param3: 新しい変数値
DSAddEnvVar()
{
cpdctl dsjob update-env-vars --project-id ${proj_id} -n $1 --env $2=$3
}
以下の構文は、指定された環境に新しい環境変数を追加します。
$ DSAddEnvVar "default_datastage_px" "newvar" "val"
DSAddProject
REST API:
#!/bin/sh

DSAddProject()
{
  data="{\"name\": \"$1\", \"generator\": \"customer\", \"storage\": {\"type\": \"assetfiles\"}}"
  proj=`curl -k -s --request POST "${CPD_URL}/transactional/v2/projects"--header "Authorization:ベアラ ${bearer_token}"-d "$data" --header 'Content-Type: application/json'`
  echo $proj|jq -r ".location" |awk -F '/' '{print $4}'
}
dsjob CLI:
#!/bin/sh

DSAddProject()
{
  proj_id=`cpdctl dsjob create-project -n "$1"`
  $proj_id のエコー
}
以下の構文は、新規プロジェクトを作成し、その ID を取得します。
$ proj_id=`DSAddProject "demo-project"`
DSDeleteEnvVar
REST API:
#!/bin/sh

# param1: 環境名
# param2: 変数名
DSDeleteEnvVar()
{
envs=`curl -k -s --request GET "${CPD_URL}/v2/environments?project_id=${proj_id}"--header "Authorization:ベアラ ${bearer_token}"`
env_id=`echo $envs|jq -r ".resources[] | select(.metadata.name=="$1") | .metadata.asset_id"`

existingvars=`echo $envs|jq -r ".resources[] | select(.metadata.name=="$env_name") | .entity.environment.environment_variables"`
updatevars= ` echo $existingvars |jq "del (. $2)" `
data="{"/entity/environment/environment_variables}":${updatevars}}」"

curl -k -s --request PATCH "${CPD_URL}/v2/environments/${env_id}?project_id=${proj_id}&environment_guid=${proj_id}"--header 'Content-Type: application/json' --header "Authorization:ベアラ ${bearer_token}"--data-raw "${data}"
}
dsjob CLI:
#!/bin/sh

# param1: 環境名
# param2: 変数名
DSDeleteEnvVar()
{
cpdctl dsjob delete-env-vars --project-id ${proj_id} -n $1 --env $2
}
以下の構文は、指定された環境から新しい環境変数を削除します。
$ DSDeleteEnvVar "default_datastage_px" "uservar1"
DSDeleteProject
REST API:
#!/bin/sh

DSDeleteProject()
{
  curl -k -s --request DELETE "${CPD_URL}/transactional/v2/projects/$1?project_id=$1"--header "Authorization:ベアラ ${bearer_token}"
}
以下の構文は、プロジェクトを削除します。 プロジェクト ID は必須です。
$ DSDeleteProject "${proj_id}"
DSE 実行
ラッパー関数を定義します。
#!/bin/sh

DS 実行 ()
{
shelltype=$1
command=$2
output=$3

sh -c $command > $output 2>&1
}
関数を呼び出します。

$ DSExecute "UNIX" "echo someinfo" "output.log"
$ returnCode=$?
DSGetIDForJob
REST API:
DSGetIdForJob()
{
  joblist=`curl --request GET "${CPD_URL}/v2/jobs?project_id=${proj_id}"--header "Authorization:ベアラ ${bearer_token}"-k -s`
  echo $joblist|jq -r ".results[].metadata|select(.name=="$1") |.asset_id "
}
dsjob CLI:
DSGetIdForJob()
{
  job=`cpdctl dsjob list-jobs --project-id ${proj_id} --with-id | grep $1`
  echo ${job#*|}
}
以下の構文は、ジョブ名ごとにジョブ ID を取得します。
$ job_id=`DSGetIdForJob "testjob"``
DSGetJobInfo
BASIC 関数 DSGetJobInfo を、以下の構文で REST API を使用するラッパー関数として書き換えることができます。 ジョブ情報を取得するには、job_id、run_id、および project_id が必要です。 一部の情報 ( DSJ.JOBSTARTTIMESTAMPはサポートされていません。
#!/bin/sh

DSGetJobInfo()
{
  # ジョブ実行メタデータを取得する
  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_token}"`

  # 情報を解析して抽出する
  if [ "$1" = "DSJ.JOBSTATUS" ]; then
    echo $jobrun|jq -r '.entity.job_run.state'
  elif [ "$1" = "DSJ.JOBNAME" ]; then
    echo $jobrun|jq -r '.entity.job_run.job_name'
  elif [ "$1" = "DSJ.PARAMLIST" ]; then
    echo $jobrun|jq -r '.entity.job_run.configuration.job_parameters[]'
  elif [ "$1" = "DSJ.STAGELIST" ] || [$1 = "DSJ.FULLSTAGELIST"]; then
    echo $jobrun|jq -r '.entity.job_run.configuration.metrics.stage_metrics[].stage_name'
  elif [ "$1" = "DSJ.USERSTATUS" ]; then
    エコー $jobrun|jq -r '.entity.job_run.configuration.userStatus'
  elif [ "$1" = "DSJ.JOBDESC" ] || ["$1" = "DSJ.JOBFULLDESC"]; then
    echo $jobrun|jq -r '.metadata.description'
  elif [ "$1" = "DSJ.JOBELAPSED" ]; then
    echo $jobrun|jq -r '.entity.job_run.duration'
  fi
}
DSGetJobInfoを、djsob CLIを使うラッパー関数として、以下の構文で書き換えることもできる。
#!/bin/sh

DSGetJobInfo()
{
  # ジョブ実行メタデータを取得する
  jobrun=`cpdctl dsjob jobrunstat --project-id ${proj_id} --id ${job_id} --run-id ${run_id} --output json --with-metadata | sed '$d'`

  # 情報を解析して抽出する
  if [ "$1" = "DSJ.JOBSTATUS" ]; then
    echo $jobrun|jq -r '.entity.job_run.state'
  elif [ "$1" = "DSJ.JOBNAME" ]; then
    echo $jobrun|jq -r '.entity.job_run.job_name'
  elif [ "$1" = "DSJ.PARAMLIST" ]; then
    echo $jobrun|jq -r '.entity.job_run.configuration.job_parameters[]'
  elif [ "$1" = "DSJ.STAGELIST" ] || [$1 = "DSJ.FULLSTAGELIST"]; then
    echo $jobrun|jq -r '.entity.job_run.configuration.metrics.stage_metrics[].stage_name'
  elif [ "$1" = "DSJ.USERSTATUS" ]; then
    エコー $jobrun|jq -r '.entity.job_run.configuration.userStatus'
  elif [ "$1" = "DSJ.JOBDESC" ] || ["$1" = "DSJ.JOBFULLDESC"]; then
    echo $jobrun|jq -r '.metadata.description'
  elif [ "$1" = "DSJ.JOBELAPSED" ]; then
    echo $jobrun|jq -r '.entity.job_run.duration'
  fi
}
以下の構文は、ジョブの状況を取得します。
$ jobstatus=`DSGetJobInfo "DSJ.JOBSTATUS"`
DSGetUserStatus
Run Bash スクリプト・ノードのスクリプト内の DataStage ジョブのユーザー状況を取得するには、プロジェクト ID (ctx.scope.id) を取得します。 「 DataStage の実行」フローの名前が run_datastage_flowの場合、ジョブ ID は tasks.run_datastage_flow.results.jobで、実行 ID は tasks.run_datastage_flow.results.job_runです。 以下の構文では、これらのパラメーターを使用してユーザー状況を取得します。
エクスポート CPDCTL_ENABLE_DSJOB=1

DSGetUserStatus()
{
  # 出力ストリングの最後の 36 文字を取得します。これは、DataStage フローのジョブ ID またはジョブ実行 ID を保持します。
  flowid= ${ds_job_id:0-36:36}
  flowrunid= ${ds_job_run_id:0-36:36}

  # dsjob コマンドまたは REST API によって jobrun メタデータを取得する
  jobrun=`cpdctl dsjob get-jobrun --project-id $project_id --id $flowid --run-id $flowrunid --output json --with-metadata`

  # ジョブの実行から userStatus メッセージを抽出する
  エコー $jobrun | jq -r '.entity.job_run.configuration.userStatus'
}
userstatus=`DSGetUserStatus`
DSGetLinkInfo
リンクの名前と、リンクに渡された行数を取得するには、プロジェクト ID、ジョブ ID、実行 ID、およびリンク名を取得します。 DSGetLinkInfoは、以下の構文を使ってラッパー関数に書き換えることができます。
REST API:
#!/bin/sh

DSGetLinkInfo()
{
  # Get the job run metadata
  jobrun=`curl -k -s --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}"`

  # Parse and extract the information
  if [ "$1" = "DSJ.LINKNAME" ]; then
    echo $jobrun|jq -r ".entity.job_run.configuration.metrics.link_metrics[]|select(.link_name==\"$2\"?) |.link_name"
  elif [ "$1" = "DSJ.LINKROWCOUNT" ]; then
    echo $jobrun|jq -r ".entity.job_run.configuration.metrics.link_metrics[]|select(.link_name==\"$2\"?) |.rows_written"
  fi
}
dsjob CLI:
#!/bin/sh

DSGetLinkInfo()
{
  # ジョブ実行メタデータを取得する
  jobrun=`cpdctl dsjob get-jobrun --project-id ${proj_id} --id ${job_id} --run-id ${run_id} --output json`

  # 情報を解析して抽出する
  if [ "$1" = "DSJ.LINKNAME" ]; then
    echo $jobrun|jq -r ".job_run.configuration.metrics.link_metrics[]|select(.link_name=="$2"?) |.link_name""
  elif [ "$1" = "DSJ.LINKROWCOUNT" ]; then
    echo $jobrun|jq -r ".job_run.configuration.metrics.link_metrics[]|select(.link_name=="$2"?) |.rows_written"
  fi
}
以下の関数呼び出しは、 Link_1のリンク行カウントを取得します。
$ rows=`DSGetLinkInfo "DSJ.LINKROWCOUNT" "Link_1"`
DSGetLogEntry, DSGetLogEntryFull, DSGetLogEventIds, DSGetLogSummary, DSGetNewestLogId
ジョブ実行のログを取得するには、プロジェクト ID、ジョブ ID、および実行 ID を取得します。 以下の構文を使用して、ログ ID、イベント ID、項目、および要約を取得するラッパー関数を作成できます。
REST API:
#!/bin/sh

GetAllLogs()
{
  logs=`curl -k -s --request GET "${CPD_URL}/v2/jobs/${job_id}/runs/${run_id}/logs?job_id=${job_id}&run_id=${run_id}&project_id=${proj_id}" --header "Authorization: Bearer ${bearer_token}"`
  logs_strip=${logs#*results\":\[\"}
  logs_strip=${logs_strip%\"\],\"total_count*}
  logs_array=${logs_strip//\\\"/\"}
  logs_array=${logs_array//\\\\\"/\\\"}
  logs_array=${logs_array//\\\\n/\\n}
  echo $logs_array | jq
}

DSGetLogEventIds()
{
  # Get the job run logs metadata
  logs_array=`GetAllLogs`

  # Parse and extract the information
  idlist=`echo $logs_array | jq -r '.[].eventID'`
  echo $idlist
}

DSGetNewestLogId()
{
  # Get the job run logs metadata
  logs_array=`GetAllLogs`

  # Parse and extract the information
  echo $logs_array | jq -r "max_by(.eventID|tonumber)|.eventID"
}

DSGetLogEntry()
{
  # Get the job run logs metadata
  logs_array=`GetAllLogs`

  # Parse and extract the information
  echo $logs_array | jq -r ".[]|select(.eventID==\"$1\")|[.occurredAt,.user,.eventType,.eventDetail]|join(\"\\\\\")"
}

DSGetLogSummary()
{
  # Get the job run logs metadata
  logs_array=`GetAllLogs`

  # Parse and extract the information
  echo $logs_array | jq -r ".[]|[.eventID,.eventType,(.eventDetail|split(\"\n\")[0])]|join(\"\\\\\")"
}
dsjob CLI:
DSGetLogEventIds()
{
  logsum=`cpdctl dsjob logsum --project-id $proj_id --job-id $job_id --run-id $run_id`
  echo $logsum | awk '{print $3}'| sed '$d'
}

DSGetNewestLogId()
{
  logsum=`cpdctl dsjob logsum --project-id $proj_id --job-id $job_id --run-id $run_id`
  echo $logsum | awk '{print $3}'.| tac | sed '1,2d'| head -n 1
}

DSGetLogEntry()
{
  entry=`cpdctl dsjob logdetail --project-id $proj_id --job-id $job_id --run-id $run_id --eventrange $1-$1`
  エコー $entry
}

DSGetLogSummary()
{
  logsum=`cpdctl dsjob logsum --project-id $proj_id --job-id $job_id --run-id $run_id`
  $logsum をエコー
}
以下の関数呼び出しは、ログ情報を取得します。
$ logids=`DSGetLogEventIds`
$ lastid=`DSGetNewestLogId`
$ logstr=`DSGetLogEntry $lastid`
$ logsum=`DSGetLogSummary`
DSGetParamInfo
パラメーターの現行値を取得するには、プロジェクト ID、ジョブ ID、および実行 ID を取得します。 ジョブ実行メタデータを取得するラッパー関数を作成します。
REST API:
DSGetParamInfo()
{
  # Get the job run metadata
  jobrun=`curl -k -s --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}"`

  # Extract the parameter value
  params=`echo $jobrun |jq -r '.entity.job_run.configuration.job_parameters[]' | grep "${1}="`
  echo $params | awk -F '=' '{print $2}'
}
dsjob CLI:
DSGetParamInfo()
{
  # ジョブ実行メタデータを取得する
  jobrun=`cpdctl dsjob get-jobrun --project-id $proj_id --id $job_id --run-id $run_id --output json`

  # パラメーター値を抽出する
  params=`echo $jobrun |jq -r '.job_run.configuration.job_parameters[]'| grep "${1}="`
  echo $params | awk -F '=' '{print $2}'
}
関数を呼び出して、パラメーター値を取得します。
$ value=`DSGetParamInfo "param_name"`
DSGetProjectInfo
現在のプロジェクトの名前と、プロジェクトのジョブのコンマ区切りリストを取得するには、プロジェクト ID が必要です。 これらのラッパー関数は、名前とリストを戻します。
REST API:
#!/bin/sh

DSGetProjectInfo()
{
  if [ "$1" = "DSJ.PROJECTNAME" ]; then
    # Get the project metadata
    proj=`curl -k -s --request GET "${CPD_URL}/v2/projects/${proj_id}?project_id=${proj_id}" --header "Authorization: Bearer ${bearer_token}"`
    # Parse and extract the name
    echo $proj |jq -r '.entity.name'
  elif [ "$1" = "DSJ.JOBLIST" ]; then
    # Get the flow list metadata
    flows=`curl -k -s --request GET "${CPD_URL}/data_intg/v3/data_intg_flows?project_id=${proj_id}" --header "Authorization: Bearer ${bearer_token}"`
    # Parse and extract the flow names
    echo $flows|jq -r '.data_flows[].metadata.name'
  fi
}
dsjob CLI:
#!/bin/sh

DSGetProjectInfo()
{
  ["$1" = "DSJ.PROJECTNAME"];
    # プロジェクトをリストし、プロジェクト ID に基づいて必要なものを選出する
    proj=`cpdctl dsjob list-projects --with-id |grep $proj_id`
    # 出力を解析し、名前を抽出する
    echo $proj|awk '{print $1}'
  elif [ "$1" = "DSJ.JOBLIST" ]; then
    # フロー・リストを取得し、フロー名を抽出する
    flows=`cpdctl dsjob list-flows --project-id ${proj_id} | tac | sed '1,4d;$d'.| tac`
    $flow のエコー
  fi
}
関数を呼び出して、プロジェクト名またはフロー・リストを取得します。
$ projectname=`DSGetProjectInfo "DSJ.PROJECTNAME"`
$ flowlist=`DSGetProjectInfo "DSJ.JOBLIST"`
DSGetVersionInfo
以下の関数は、REST API を使用して製品バージョンを取得します。
DSGetVersionInfo()
{
  ["$1" = "DSJ.VER.DS"];
    prod="DataStage"
  elif ["$1" = "DSJ.VER.DATAREP"];
    prod="data-replication "
  elif ["$1" = "DSJ.VER.PIPELINE"];
    prod= "Watson Studio Pipelines"
  elif ["$1" = "DSJ.VER.CORE"];
    prod= "共通コア・サービス"
  elif ["$1" = "DSJ.VER.CONTROL"];
    prod= "コントロール・プレーン"
  fi
  versions=`curl -k -s --request GET "${CPD_URL}/zen-data/v1/extensions?extension_point_id=zen_services_info"--header "Authorization:ベアラ ${bearer_token}"`
  echo $versions | jq -r ".data[]|select(.display_name=="$prod")|.details.version""
}
この関数を呼び出して、製品バージョンを取得します。
$ DSGetVersionInfo "DSJ.VER.DS"
4.6.0
DSJobNameFromJobId
ジョブ名を取得するには、プロジェクト ID とジョブ ID が必要です。 以下の関数は、ジョブ名を取得します。
REST API:
DSJobNameFromJobId()
{
  job=`curl --request GET "${CPD_URL}/v2/jobs/${job_id}?project_id=${proj_id}&job_id=${job_id}" --header "Authorization: Bearer ${bearer_token}" -k -s`
  echo $job | jq -r '.metadata.name'
}
dsjob CLI:
DSJobNameFromJobId()
{
  job=`cpdctl dsjob get-job --project-id $proj_id --id $job_id --output json --with-metadata | sed '$d'`
  echo $job | jq -r '.metadata.name'
}
関数を呼び出して、ジョブ名を取得します。
jobname=`DSJobNameFromJobId``
DSListEnvVars
環境変数をリストするには、プロジェクト ID が必要です。
REST API:
#!/bin/sh

# param1: environment name
DSListEnvVars()
{
  envs=`curl -k -s --request GET "${CPD_URL}/v2/environments?project_id=${proj_id}" --header "Authorization: Bearer ${bearer_token}"`
  vars=`echo $envs|jq -r ".resources[] | select(.metadata.name==\"$1\") | .entity.environment.environment_variables"`
  echo $vars
}
dsjob CLI:
#!/bin/sh

# param1: 環境名
DSListEnvVars()
{
  output=`cpdctl dsjob list-env-vars --project-id ${proj_id} -n $1`
  vars=`echo $output |sed '1d''`。|tac | sed '1,4d'`
  $vars のエコー
}
関数を呼び出してリストを取得します。
$ DSListEnvVars "default_datastage_px"
DSMakeJobReport
ジョブ・レポートを作成するには、DSGetJobInfo, DSGetStageInfoとDSGetLinkInfoを定義します。 以下の関数は、ジョブ実行の状況を表示します。
DSMakeJobReport()
{
  # job basic info
  jobname=`DSGetJobInfo "DSJ.JOBNAME"`
  jobelapsed=`DSGetJobInfo "DSJ.JOBELAPSED"`
  jobstatus=`DSGetJobInfo "DSJ.JOBSTATUS"`
  userstatus=`DSGetJobInfo "DSJ.USERSTATUS"`

  echo "STATUS REPORT FOR JOB: ${jobname}"
  echo "Job elapsed time=${jobelapsed}"
  echo "Job status=${jobstatus}"
  if [ "$userstatus" != "" ]; then
    echo "User status=${userstatus}"
  fi

  if [ "$1" != "1" ]; then
    exit 0
  fi

  # stage and link detail
  stagelist=`DSGetJobInfo "DSJ.STAGELIST"`
  stagearray=($stagelist)
  for stage in ${stagearray[@]}
  do
    rows=`DSGetStageInfo "DSJ.STAGEINROWNUM" "${stage}"`
    echo "  Stage: ${stage}, ${rows} rows input"

    links=`DSGetStageInfo "DSJ.LINKLIST" "${stage}"`
    linkarray=($links)
    for link in ${linkarray[@]}
    do
      rows=`DSGetLinkInfo "DSJ.LINKROWCOUNT" ${link}`
      echo "    Link: ${link}, ${rows} rows"
    done
  done
}
関数を呼び出してリストを取得します。
DSMakeJobReport "1"
DSRunJob
REST API:
#!/bin/sh

DSRunJob()
{
if ["$1" = ""];
環境 = '{}'
それ以外の場合
envs=" {¥ "job_run¥": {¥ "config¥": {\"env_variables\": [\"$1\"]}}} "
fi

jobrun=`curl -k -s --request POST "${CPD_URL}/v2/jobs/${job_id}/runs?job_id=${job_id}&project_id=${proj_id}"--header 'Content-Type: application/json' --header "Authorization:ベアラ ${bearer_token}"-d "$envs"`
run_id=`echo $jobrun | jq -r '.metadata.asset_id'`
$run_id をエコー
}
dsjob CLI:
#!/bin/sh

DSRunJob()
{
if ["$1" = ""];
envs= ""
それ以外の場合
envs=" -- env $1 "
fi

出力=`cpdctl dsjob run --project-id ${proj_id} --job-id ${job_id} $envs`
run_id=`echo $output | grep 'ID' | awk '{print $4}'`
$run_id をエコー
}
以下の構文は、指定されたジョブを実行します。

# get the job_id according to job name
$ 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=="dstestjob"?) |.asset_id'`
# run job
$ run_id=`DSRunJob "key1=value1"`
DSSetEnvVar
REST API:
#!/bin/sh

# param1: 環境名
# param2: 変数名
# param3: 変数値
DSSetEnvVar()
{
envs=`curl -k -s --request GET "${CPD_URL}/v2/environments?project_id=${proj_id}"--header "Authorization:ベアラ ${bearer_token}"`
env_id=`echo $envs|jq -r ".resources[] | select(.metadata.name=="$1") | .metadata.asset_id"`

existingvars=`echo $envs|jq -r ".resources[] | select(.metadata.name=="$env_name") | .entity.environment.environment_variables"`
updatevars=`echo $existingvars |jq ".$2 = \"$3\""`
data="{"/entity/environment/environment_variables}":${updatevars}}」"

curl -k -s --request PATCH "${CPD_URL}/v2/environments/${env_id}?project_id=${proj_id}&environment_guid=${proj_id}"--header 'Content-Type: application/json' --header "Authorization:ベアラ ${bearer_token}"--data-raw "${data}"
}
dsjob CLI:
#!/bin/sh

# param1: 環境名
# param2: 変数名
# param3: 変数値
DSSetEnvVar()
{
cpdctl dsjob update-env-vars --project-id ${proj_id} -n $1 --env $2=$3
}
以下の構文は、環境変数を指定された値に設定します。
$ DSSetEnvVar "default_datastage_px" "uservar" "newval"
DSSetIdForJob
REST API を使用して、ジョブのユーザー定義名を設定します。
#!/bin/sh

#param1: ジョブ ID
#param2: 新規ジョブ名
DSSetIdForJob()
{
  data="[{\"op\": \"replace\", \"path\": \"/metadata/name\", \"value\": $2}]"
  curl -k -s --request PATCH "${CPD_URL}/v2/jobs/$1?job_id=$1&project_id=${proj_id}"--header 'Content-Type: application/json' --header "Authorization:ベアラ ${bearer_token}"--data-raw "${data}"
}
関数を呼び出して名前を設定します。
$ DSSetIdForJob $job_id "new_job_name"
DSSetParam
REST API を使用して、ジョブ・パラメーター値を指定します。
#!/bin/sh

#param1: ジョブ ID
#param2: パラメーター名
#param3: パラメーター値
DSSetParam()
{
  vars=(`curl -k -s --request GET "${CPD_URL}/v2/jobs/$1?job_id=$1&project_id=${proj_id}"--header "Authorization:ベアラ ${bearer_token}"| jq '.entity.job.configuration.job_parameters[]'`)
  for i in "${!vars[@]}";
  do
    if [[ ${vars[$i]} == \"$2=* ]] ; then
      newvars[$i]=\"$2=$3\"
    それ以外の場合
      newvars[$i]=${vars[$i]}
    fi
  done
  varstr=$(printf ",%s" "${newvars[@]}"))
  varstr="[${varstr:1}]"
  data="[{"op":\Đọczyć?\{"path": ¦"/entity/job/configuration/job_parameters", ¦"value":${varstr}}]"
  curl -k -s --request PATCH "${CPD_URL}/v2/jobs/$1?job_id=$1&project_id=${proj_id}"--header 'Content-Type: application/json' --header "Authorization:ベアラ ${bearer_token}"--data-raw "${data}"
}
関数を呼び出して値を設定します。
$ DSSetParam $job_id "param" "newvalue"
DSStopJob
REST API:
#!/bin/sh

DSStopJob()
{
output=`curl -k -s --request POST "${CPD_URL}/v2/jobs/${job_id}/runs/${run_id}/cancel?job_id=${job_id}&project_id=${proj_id}&run_id=${run_id}"--header 'Content-Type: application/json' --header "Authorization:ベアラ ${bearer_token}"-d '{}'`
$output をエコー
}
dsjob CLI:
#!/bin/sh

DSStopJob()
{
出力=`cpdctl dsjob stop --project-id $proj_id --job-id $job_id --run-id $run_id`
$output をエコー
}
以下の構文は、ジョブを停止します。 停止されたジョブは、job_id パラメーターに指定されたジョブです。
$ DSStopJob
DSTranslateCode
変換機能を定義して、ジョブ制御状況またはエラー・コードをテキスト説明に変換します。
#!/bin/sh

DSTranslateCode()
{
  case $1 in
    0)
      echo "実行中"
      ;;
    1)
      echo "終了しました OK"
      ;;
    2)
      echo "警告で終了しました"
      ;;
    3)
      echo "異常終了"
      ;;
    4)
      echo "キューに入れられました"
      ;;
    11)
      echo "検証済み OK"
      ;;
    12)
      echo "警告で検証されました"
      ;;
    13)
      echo "検証に失敗しました"
      ;;
    21)
      echo "リセットされました"
      ;;
    96)
      echo "クラッシュ"
      ;;
    97)
      echo "オペレーターによって停止されました"
      ;;
    98)
      echo "コンパイルされていません"
      ;;
    99)
      echo "実行されていません"
      ;;
    -1)
      echo "無効なJobHandle"
      ;;
    -2)
      echo "ジョブは正しい状態ではありません (コンパイルされ、実行されていません)"
      ;;
    -3)
      echo "ParamNameがジョブの既知のパラメータを参照していない"
      ;;
    -4)
      echo "ParamValue/Limitvalueは適切ではありません"
      ;;
    -5)
      echo "LimitType/RunMode/InfoTypeのトークンが認識されない"
      ;;
    -6)
      echo "ジョブは現行ジョブ内から実行されませんでした"
      ;;
    -7)
      echo "StageNameがジョブ内の既知のステージを参照していない"
      ;;
    -8)
      echo "StageNameはDSJ.MEで、呼び出し元はステージ内で実行されていない"
      ;;
    -9)
      echo "LinkNameはステージの既知のリンクを参照していません"
      ;;
    -10)
      echo "JobHandleは他のユーザーによってロックされたジョブを参照しています"
      ;;
    -11)
      echo "JobHandleは現在削除されたジョブを参照している"
      ;;
    -12)
      echo "JobNameが正しく形成されていないか、ジョブが存在しない"
      ;;
    -13)
      echo "TimeStampパラメータが不正に形成された"
      ;;
    -14)
      echo "イベントの待機中にタイムアウトになりました"
      ;;
    -15)
      echo "暗号化された値の暗号化解除が失敗しました"
      ;;
    -16)
      echo "現行ジョブ以外のジョブの値、デフォルト値、または設計デフォルト値を取得できません"
      ;;
    -17)
      echo "テンプレート・ファイルが見つかりません"
      ;;
    -18)
      echo "テンプレート・ファイルの処理中にエラーが発生しました"
      ;;
    -19)
      echo "パラメーター名が欠落しています-フィールドが「name: value」のように表示されません"
      ;;
    -20)
      echo "ファイル・パス名が指定されていません"
      ;;
    -21)
      echo "外部コマンドの実行中にエラーが発生しました"
      ;;
    -99)
      echo "汎用リポジトリー・インターフェース 'other error'"
      ;;
    *)
      echo "不明な状況 $1"
      ;;
  esac
}
DSWaitForJob
REST API:
$ jobrun=`curl -k -s --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}"`
$ status=`echo $jobrun | jq -r '.entity.job_run.state'`
$ echo $status
dsjob CLI:
$ jobrun=`cpdctl dsjob get-jobrun --project-id ${proj_id} -N ${job_id} --run-id ${run_id} --output json`
$ status=`echo $jobrun | jq -r '.job_run.state'`
$ echo $status
ラッパー関数:
#!/bin/sh

#param1: ジョブ ID
#param2: 実行 ID
#param3: タイムアウト
DSWaitForJob()
{
OLD_IFS = "$IFS"
IFS= ","
ジョブ引数 = ($1)
runarr = ($2)
IFS=「$OLD_IFS」

長さ = ${#jobarr[@]}
開始 = $(日付 +%s)

一方、true
do
now=$ (日付 +%s)
時間 = $(($now-$start))
if [$time -ge $3];
return 1
fi

result=0
for ((i=0;i<len;i++))
if [ !-z "${statarr[i]}" "] && [ ${statarr[i]} = "Completed" ]; then
result=$(($result+1)) 
続く
fi
job_id=${jobarr[i]}
run_id=${runarr[i]}
jobrun=`cpdctl dsjob get-jobrun --project-id ${proj_id} -N ${job_id} --run-id ${run_id} --output json`
status=`echo $jobrun | jq -r '.job_run.state'`
statarr [i] = $status
if [ ${statarr[i]} = "Completed" ]; then
result=$(($result+1))
elif [ ${statarr[i]} = "Completed" ]; then
return 1
fi
完了;

if [$result -eq $len];
return 0
fi

done

}
以下の構文は、指定されたジョブを待機します。
$ DSWaitForJob "${jobid1},${jobid2}" "${runid1},${runid2}" "600"
DSJobLinkInfo
REST API を使用して、ジョブ実行メタデータからリンク情報を取得します。
DSJobLinkInfo()
{
  # ジョブ実行メタデータを取得する
  jobrun=`curl -k -s --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_token}"`

  # リンク情報を取得する
  echo $jobrun | jq -r ".entity.job_run.configuration.metrics.link_metrics[]|(¦リンク名:¦" + .link_name +¦",¦リンク元:¦" + .source + ¦", dest:¦" + .dest + ¦", state:¦" + .state + ¦", rows read:¦" + (.rows_read|tostring) + ¦", rows written:¦" + (.rows_written|tostring))"
}
関数を呼び出してリンク情報を取得します。
$ rows=`DSJobLinkInfo`