0 / 0

Exemples de remplacement de routine dans DataStage®

Dernière mise à jour : 12 mars 2025
Exemples de remplacement de routine dans DataStage

Les exemples suivants montrent comment réécrire les routines BASIC à l'aide de l'interface de ligne de commande dsjob ou de l'API REST. Vous pouvez réécrire des routines en tant que fonctions d'encapsuleur et les appeler ultérieurement dans vos scripts, ou utiliser le corps de l'exemple de fonction comme une commande par lui-même.

Exemples

Obtenir l'ID de projet

Expression CEL:

ctx.scope.id

API REST :

Dans cet exemple, le nom du projet est "project1." Remplacez-le par le nom de votre projet.
$ 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'`
$ echo $ID_projet 
Interface CLI dsjob:
$ project=`cpdctl dsjob list-projects --with-id |grep project1`
$ proj_id=`echo ${project#*|}``
$ echo $ID_projet
Obtenir l'ID de travail

Expression CEL:

ctx.job.id
API REST :
$ joblist=`curl --request GET "${CPD_URL}/v2/jobs?project_id=${proj_id}" --header "Authorization : Bearer ${bearer_token}" -k -s`
$ echo $liste_travaux |jq 
Cette commande permet d'imprimer une liste de travaux. Remplacez "testjob" par le nom de votre travail dans les commandes suivantes.
$ echo $joblist|jq -r '.results[].metadata|select(.name=="testjob" ?) |.asset_id'
Interface CLI dsjob:
$ 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 $ID_travail
Obtenir l'ID d'exécution de travail

Expression CEL:

ctx.job_run.id
API REST :
$ runlist=`curl --request GET "${CPD_URL}/v2/jobs/${job_id}/runs?project_id=${proj_id}" --header "Authorization : Bearer ${bearer_token}" -k -s`
$ echo $listre_exécution
Cette commande permet d'imprimer la liste des exécutions de travail. Sélectionnez une exécution en fonction de la description, de l'heure de création ou d'autres métadonnées.
$ echo $runlist|jq -r '.results[]|select(.metadata.description=="Initial run" ?)
Interface CLI dsjob:
$ cpdctl dsjob list-jobruns --project-id ${proj_id} --id $job_id --detail
DSAddEnvVar
API REST :
#!/bin/sh

# param1: nom de l'environnement
# param2: nouveau nom de variable
# param3: nouvelle valeur de variable
DSAddEnvVar()
{
envs=`curl -k -s --request GET "${CPD_URL}/v2/environments?project_id=${proj_id}" --header "Authorization : Bearer ${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 ${bearer_token}" --data-raw "${data}"
}
Interface CLI dsjob:
#!/bin/sh

# param1: nom de l'environnement
# param2: nouveau nom de variable
# param3: nouvelle valeur de variable
DSAddEnvVar()
{
cpdctl dsjob update-env-vars --project-id ${proj_id} -n $1 --env $2=$3
}
La syntaxe suivante ajoute une nouvelle variable d'environnement à l'environnement spécifié.
$ DSAddEnvVar "default_datastage_px" "newvar" "val"
DSAddProject
API REST :
#!/bin/sh

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

DSAddProject()
{
  proj_id=`cpdctl dsjob create-project -n "$1"`
  echo $ID_projet
}
La syntaxe suivante crée un nouveau projet et extrait son ID.
$ proj_id=`DSAddProject "demo-project"`
DSDeleteEnvVar
API REST :
#!/bin/sh

# param1: nom de l'environnement
# param2: nom de variable
DSDeleteEnvVar()
{
envs=`curl -k -s --request GET "${CPD_URL}/v2/environments?project_id=${proj_id}" --header "Authorization : Bearer ${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 ${bearer_token}" --data-raw "${data}"
}
Interface CLI dsjob:
#!/bin/sh

# param1: nom de l'environnement
# param2: nom de variable
DSDeleteEnvVar()
{
cpdctl dsjob delete-env-vars --project-id ${proj_id} -n $1 --env $2
}
La syntaxe suivante supprime une nouvelle variable d'environnement de l'environnement spécifié.
$ DSDeleteEnvVar "default_datastage_px" "uservar1"
DSDeleteProject
API REST :
#!/bin/sh

DSDeleteProject()
{
  curl -k -s --request DELETE "${CPD_URL}/transactional/v2/projects/$1?project_id=$1" --header "Authorization : Bearer ${bearer_token}"
}
La syntaxe suivante supprime un projet. L'ID de projet est obligatoire.
$ DSDeleteProject "${proj_id}"
Exécution de fichier
Définissez une fonction d'encapsuleur.
#!/bin/sh

Exécution de fichier ()
{
shelltype=$1
command=$2
output=$3

sh -c $command > $output 2>&1
}
Appelez la fonction.

$ DSExecute "UNIX" "echo someinfo" "output.log"
$ returnCode=$?
DSGetIDForJob
API REST :
DSGetIdForJob()
{
  joblist=`curl --request GET "${CPD_URL}/v2/jobs?project_id=${proj_id}" --header "Authorization : Bearer ${bearer_token}" -k -s`
  echo $joblist|jq -r ".results[].metadata|select(.name=="$1\") |.asset_id"
}
Interface CLI dsjob:
DSGetIdForJob()
{
  job=`cpdctl dsjob list-jobs --project-id ${proj_id} --with-id | grep $1`
  echo ${job#*|}
}
La syntaxe suivante extrait l'ID de travail par nom de travail.
$ job_id=`DSGetIdForJob "testjob"``
DSGetJobInfo
Vous pouvez réécrire la fonction BASIC DSGetJobInfo comme une fonction enveloppante qui utilise l'API REST avec la syntaxe suivante. Les éléments job_id, run_id et project_id sont requis pour extraire les informations de travail. Certaines informations, telles que DSJ.JOBSTARTTIMESTAMPn'est pas pris en charge.
#!/bin/sh

DSGetJobInfo()
{
  # Obtenir les métadonnées d'exécution de travail
  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}"`

  # Analyse et extraction des informations
  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
    echo $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
}
Vous pouvez également réécrire DSGetJobInfo comme une fonction enveloppante qui utilise la CLI djsob avec la syntaxe suivante.
#!/bin/sh

DSGetJobInfo()
{
  # Obtenir les métadonnées d'exécution de travail
  jobrun=`cpdctl dsjob jobrunstat --project-id ${proj_id} --id ${job_id} --run-id ${run_id} --output json --with-metadata sed '$d'``

  # Analyse et extraction des informations
  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
    echo $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
}
La syntaxe suivante extrait le statut du travail.
$ jobstatus=`DSGetJobInfo "DSJ.JOBSTATUS"`
DSGetUserStatus
Pour obtenir le statut utilisateur d'un travail DataStage dans le script d'un noeud de script Run Bash, obtenez l'ID de projet (ctx.scope.id). Si le flux d'exécution DataStage est nommé run_datastage_flow, l'ID de travail est tasks.run_datastage_flow.results.jobet l'ID d'exécution est tasks.run_datastage_flow.results.job_run. La syntaxe suivante utilise ces paramètres pour extraire le statut de l'utilisateur.
export CPDCTL_ENABLE_DSJOB=1

DSGetUserStatus()
{
  # obtenir les 36 derniers caractères de la chaîne de sortie, qui contient l'ID de travail ou l'ID d'exécution de travail du flux de l'étape de données
  flowid= ${ds_job_id:0-36:36}
  flowrunid= ${ds_job_run_id:0-36:36}

  # obtenir les métadonnées jobrun par la commande dsjob ou l'API REST
  jobrun=`cpdctl dsjob get-jobrun --project-id $project_id --id $flowid --run-id $flowrunid --output json --with-metadata`

  # extrait le message userStatus de l'exécution du travail
  echo $jobrun | jq -r '.entity.job_run.configuration.userStatus'
}
userstatus=`DSGetUserStatus`
DSGetLinkInfo
Pour extraire le nom d'un lien et le nombre de lignes qui ont transmis un lien, obtenez l'ID de projet, l'ID de travail, l'ID d'exécution et le nom de lien. Vous pouvez réécrire DSGetLinkInfo en une fonction enveloppante à l'aide de la syntaxe suivante.
API REST :
#!/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
}
Interface CLI dsjob:
#!/bin/sh

DSGetLinkInfo()
{
  # Obtenir les métadonnées d'exécution de travail
  jobrun=`cpdctl dsjob get-jobrun --project-id ${proj_id} --id ${job_id} --run-id ${run_id} --output json`

  # Analyse et extraction des informations
  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
}
L'appel de fonction suivant obtient le nombre de lignes de lien pour Link_1.
$ rows=`DSGetLinkInfo "DSJ.LINKROWCOUNT" "Link_1"`
DSGetLogEntry, DSGetLogEntryFull, DSGetLogEventIds, DSGetLogSummary, DSGetNewestLogId
Pour obtenir les journaux d'une exécution de travail, obtenez l'ID de projet, l'ID de travail et l'ID d'exécution. Vous pouvez écrire des fonctions d'encapsuleur pour extraire des ID de journal, des ID d'événement, des entrées et des récapitulatifs avec la syntaxe suivante.
API REST :
#!/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(\"\\\\\")"
}
Interface CLI dsjob:
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`
  echo $entrée
}

DSGetLogSummary()
{
  logsum=`cpdctl dsjob logsum --project-id $proj_id --job-id $job_id --run-id $run_id``
  echo $logsum
}
Les appels de fonction suivants obtiennent les informations de journal.
$ logids=`DSGetLogEventIds`
$ lastid=`DSGetNewestLogId`
$ logstr=`DSGetLogEntry $lastid`
$ logsum=`DSGetLogSummary`
DSGetParamInfo
Pour obtenir la valeur en cours d'un paramètre, obtenez l'ID de projet, l'ID de travail et l'ID d'exécution. Ecrivez une fonction d'encapsuleur pour extraire les métadonnées d'exécution de travail.
API REST :
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}'
}
Interface CLI dsjob:
DSGetParamInfo()
{
  # Obtenir les métadonnées d'exécution de travail
  jobrun=`cpdctl dsjob get-jobrun --project-id $proj_id --id $job_id --run-id $run_id --output json`

  # Extraction de la valeur de paramètre
  params=`echo $jobrun |jq -r '.job_run.configuration.job_parameters[]'' | grep "${1}="`"
  echo $params | awk -F '=' '{print $2}'
}
Appelez la fonction pour obtenir une valeur de paramètre.
$ value=`DSGetParamInfo "param_name"`
DSGetProjectInfo
Pour obtenir le nom du projet en cours et une liste séparée par des virgules des travaux du projet, vous avez besoin de l'ID de projet. Ces fonctions d'encapsuleur renvoient le nom et la liste.
API REST :
#!/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
}
Interface CLI dsjob:
#!/bin/sh

DSGetProjectInfo()
{
  if [ "$1" = "DSJ.PROJECTNAME" ] ; puis
    # Répertorier les projets et en sélectionner un en fonction de l'ID de projet
    proj=`cpdctl dsjob list-projects --with-id |grep $proj_id`
    # Analyser la sortie et extraire le nom
    echo $proj|awk '{print $1}'
  elif [ "$1" = "DSJ.JOBLIST" ] ; then
    # Obtenir la liste de flux et extraire les noms de flux
    flows=`cpdctl dsjob list-flows --project-id ${proj_id} | tac | sed '1,4d;$d' | tac`
    echo $flux
  fi
}
Appelez la fonction pour obtenir le nom du projet ou la liste de flux.
$ projectname=`DSGetProjectInfo "DSJ.PROJECTNAME"`
$ flowlist=`DSGetProjectInfo "DSJ.JOBLIST"`
DSGetVersionInfo
La fonction suivante utilise l'API REST pour obtenir la version du produit.
DSGetVersionInfo()
{
  if [ "$1" = "DSJ.VER.DS" ] ; puis
    prod="DataStage"
  elif [ "$1" = "DSJ.VER.DATAREP" ] ; puis
    prod="réplication de données "
  elif [ "$1" = "DSJ.VER.PIPELINE" ] ; puis
    prod= "Watson Studio Pipelines"
  elif [ "$1" = "DSJ.VER.CORE" ] ; puis
    prod="Common Core Services "
  elif [ "$1" = "DSJ.VER.CONTROL" ] ; puis
    prod="Plan de contrôle "
  fi
  versions=`curl -k -s --request GET "${CPD_URL}/zen-data/v1/extensions?extension_point_id=zen_services_info" --header "Authorization : Bearer ${bearer_token}"`
  echo $versions | jq -r ".data[]|select(.display_name=="$prod\")|.details.version"
}
Appelez la fonction pour obtenir la version du produit.
$ DSGetVersionInfo "DSJ.VER.DS"
4.6.0
DSJobNameFromJobId
Pour obtenir un nom de travail, vous avez besoin de l'ID de projet et de l'ID de travail. Les fonctions suivantes extraient un nom de travail.
API REST :
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'
}
Interface CLI dsjob:
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'
}
Appelez la fonction pour obtenir le nom du travail.
jobname=`DSJobNameFromJobId``
DSListEnvVars
Pour répertorier les variables d'environnement, vous avez besoin de l'ID de projet.
API REST :
#!/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
}
Interface CLI dsjob:
#!/bin/sh

# param1: nom de l'environnement
DSListEnvVars()
{
  output=`cpdctl dsjob list-env-vars --project-id ${proj_id} -n $1`
  vars=`echo $output |sed '1d' |tac | sed '1,4d'``
  echo $vars
}
Appelez la fonction pour obtenir la liste.
$ DSListEnvVars "default_datastage_px"
DSMakeJobReport
Pour créer un rapport de travail, définissez DSGetJobInfo, DSGetStageInfo et DSGetLinkInfo. La fonction suivante affiche l'état d'une exécution de travail.
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
}
Appelez la fonction pour obtenir la liste.
DSMakeJobReport "1"
DSRunJob
API REST :
#!/bin/sh

DSRunJob()
{
if [ "$1" = "" ] ; alors
envs ='{ }'
else
envs=" { \" job_run \": { \" configuration \": {\"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 ${bearer_token}" -d "$envs"`
run_id=``echo $jobrun | jq -r '.metadata.asset_id'``
echo $ID_exécution
}
Interface CLI dsjob:
#!/bin/sh

DSRunJob()
{
if [ "$1" = "" ] ; alors
envs= ""
else
envs=" -- env $ 1 "
fi

output=`cpdctl dsjob run --project-id ${proj_id} --job-id ${job_id} $envs`
run_id=`echo $output | grep 'ID' | awk '{print $4}'`
echo $ID_exécution
}
La syntaxe suivante exécute un travail spécifié.

# 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
API REST :
#!/bin/sh

# param1: nom de l'environnement
# param2: nom de variable
# param3: valeur de variable
DSSetEnvVar()
{
envs=`curl -k -s --request GET "${CPD_URL}/v2/environments?project_id=${proj_id}" --header "Authorization : Bearer ${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 ${bearer_token}" --data-raw "${data}"
}
Interface CLI dsjob:
#!/bin/sh

# param1: nom de l'environnement
# param2: nom de variable
# param3: valeur de variable
DSSetEnvVar()
{
cpdctl dsjob update-env-vars --project-id ${proj_id} -n $1 --env $2=$3
}
La syntaxe suivante définit une variable d'environnement sur la valeur spécifiée.
$ DSSetEnvVar "default_datastage_px" "uservar" "newval"
DSSetIdForJob
Utilisez l'API REST pour définir un nom défini par l'utilisateur pour un travail.
#!/bin/sh

#param1:
#param2: nouveau nom de travail
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 ${bearer_token}" --data-raw "${data}"
}
Appelez la fonction pour définir le nom.
$ DSSetIdForJob $job_id "new_job_name"
DSSetParam
Utilisez l'API REST pour spécifier des valeurs de paramètre de travail.
#!/bin/sh

#param1:
#param2:
#param3:
DSSetParam()
{
  vars=(`curl -k -s --request GET "${CPD_URL}/v2/jobs/$1?job_id=$1&project_id=${proj_id}" --header "Authorization : Bearer ${bearer_token}" | jq '.entity.job.configuration.job_parameters[]'`)
  for i in "${!vars[@]}" ;
  do
    if [[ ${vars[$i]} == \"$2=* ]] ; then
      newvars [ $i ] = \ "$2 = $3 \"
    else
      newvars[$i]=${vars[$i]}
    fi
  done
  varstr=$(printf ",%s" "${newvars[@]}")
  varstr="[${varstr:1}]"
  data="[{\"op\" : \N "replace\N", \N "path\N" : \N"/entity/job/configuration/job_parameters", \N "value\N" : ${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 ${bearer_token}" --data-raw "${data}"
}
Appelez la fonction pour définir la valeur.
$ DSSetParam $job_id "param" "newvalue"
DSStopJob
API REST :
#!/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 ${bearer_token}" -d '{}'`
echo $output
}
Interface CLI dsjob:
#!/bin/sh

DSStopJob()
{
output=`cpdctl dsjob stop --project-id $proj_id --job-id $job_id --run-id $run_id``
echo $output
}
La syntaxe suivante arrête un travail. Le travail arrêté est celui spécifié dans le paramètre job_id.
$ DSStopJob
DSTranslateCode
Définissez une fonction de conversion pour convertir un statut de contrôle de travail ou un code d'erreur en explication textuelle.
#!/bin/sh

DSTranslateCode()
{
  case $1 in
    0)
      echo "En cours d'exécution"
      ;;
    1)
      echo "Terminé OK"
      ;;
    2)
      echo "Terminé avec des avertissements"
      ;;
    3)
      echo "Abandonné"
      ;;
    4)
      echo "Mis en file d'attente"
      ;;
    11)
      echo "Validé OK"
      ;;
    12)
      echo "Validé avec des avertissements"
      ;;
    13)
      echo "Echec de la validation"
      ;;
    21)
      echo "A été réinitialisé"
      ;;
    96)
      echo "Crashed"
      ;;
    97)
      echo "Arrêté par l'opérateur"
      ;;
    98)
      echo "Non compilé"
      ;;
    99)
      echo "Pas en cours d'exécution"
      ;;
    -1)
      echo "Invalide JobHandle"
      ;;
    -2)
      echo "Le travail n'est pas à l'état correct (compilé et non en cours d'exécution)"
      ;;
    -3)
      echo "ParamName ne fait pas référence à un paramètre connu du travail"
      ;;
    -4)
      echo "ParamValue/Limitvalue n'est pas approprié"
      ;;
    -5)
      echo "Token in LimitType/RunMode/InfoType not recognized"
      ;;
    -6)
      echo "Le travail n'a pas été exécuté à partir du travail en cours"
      ;;
    -7)
      echo "StageName ne fait pas référence à une étape connue du travail"
      ;;
    -8)
      echo "StageName was DSJ.ME and the caller is not running within a stage"
      ;;
    -9)
      echo "LinkName ne fait pas référence à un lien connu de la scène"
      ;;
    -10)
      echo "JobHandle fait référence à un travail verrouillé par un autre utilisateur"
      ;;
    -11)
      echo "JobHandle fait référence à un travail qui a été supprimé"
      ;;
    -12)
      echo "JobName mal formé ou job n'existe pas"
      ;;
    -13)
      echo "Un paramètre TimeStamp a été mal formé"
      ;;
    -14)
      echo "Délai d'attente d'un événement"
      ;;
    -15)
      echo "Echec du déchiffrement de la valeur chiffrée"
      ;;
    -16)
      echo "Impossible d'obtenir des valeurs, des valeurs par défaut ou des valeurs par défaut de conception pour un travail à l'exception du travail en cours"
      ;;
    -17)
      echo "Fichier modèle introuvable"
      ;;
    -18)
      echo "Erreur lors du traitement du fichier modèle"
      ;;
    -19)
      echo "Le nom de paramètre est manquant-la zone ne ressemble pas à'name:value'"
      ;;
    -20)
      echo "Le chemin d'accès au fichier n'est pas indiqué"
      ;;
    -21)
      echo "Erreur lors de l'exécution de la commande externe"
      ;;
    -99)
      echo "Interface de référentiel générale'autre erreur'"
      ;;
    *)
      echo "Statut inconnu $ 1"
      ;;
  esac
}
DSWaitForJob
API REST :
$ 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
Interface CLI dsjob:
$ 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
Fonction d'encapsuleur:
#!/bin/sh

#param1:
#param2:
#param3:
DSWaitForJob()
{
OLD_IFS = "$IFS"
IFS= ","
jobarr = ($ 1)
runarr = ($ 2)
IFS=" $OLD_IFS "

len= ${#jobarr[@]}
start=$ (date +%s)

alors que true
do
now=$ (date +%s)
time=$ (($now-$start))
si [ $time -ge $ 3 ] ; alors
return 1
fi

result=0
for ((i=0;i<len;i++)) do
if [ ! -z "${statarr[i]}" ] && [ ${statarr[i]} = "Terminé" ] ; then
result=$(($result+1)) 
poursuivre
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
fait ;

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

done

}
La syntaxe suivante attend un travail spécifié.
$ DSWaitForJob "${jobid1},${jobid2}" "${runid1},${runid2}" "600"
DSJobLinkInfo
Utilisez l'API REST pour obtenir des informations de lien à partir des métadonnées d'exécution de travail.
DSJobLinkInfo()
{
  # Obtenir les métadonnées d'exécution de travail
  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}"`

  # Obtenir des informations de lien
  echo $jobrun | jq -r ".entity.job_run.configuration.metrics.link_metrics[]|(\"Link name:\" + .link_name + \", source:\" + .source + \N", dest:\N" + .dest + \N", state:\N" + .state + \N", rows read:\N" + (.rows_read|tostring) + \N", rows written:\N" + (.rows_written|tostring))"
}
Appelez la fonction pour obtenir les informations de lien.
$ rows=`DSJobLinkInfo`