■ はじめに
https://dk521123.hatenablog.com/entry/2019/10/10/223018
の続き。 今回は、Glueでのパラメータの受け渡しについて、考える。
ジョブ間の値の受け渡し
【1】実行プロパティ 【2】ジョブ パラメータ ... 渡すだけ(受け取れない)
【1】実行プロパティ
実行プロパティ (Run property)が使えそう。
公式サイトより
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/workflows_overview.html
より抜粋 ~~~~ ワークフローの実行全体の状態を共有して管理するには、 ワークフローのデフォルトの実行プロパティを定義できます。 これらのプロパティ (名前と値のペア) は、ワークフローのすべてのジョブで使用できます。 AWS Glue API を使用すると、ジョブはワークフローの実行プロパティを取得し、 これらのプロパティを変更してワークフローの以降のジョブで使用できます。
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/workflow-run-properties-code.html
ワークフローの実行プロパティを使用して、 AWS Glue ワークフローのジョブ間の状態を共有して管理します。 デフォルトの実行プロパティは、ワークフローの作成時に設定できます。 次に、ジョブの実行時に、ジョブは実行プロパティの値を取得して必要に応じて変更し、 ワークフローの以降のジョブに対する入力として使用できます。 ジョブが実行プロパティを変更した場合、新しい値が有効なのは ワークフローの実行中に限られるため、デフォルトの実行プロパティは影響を受けません。
API
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.get_workflow_run_properties
使用上の注意
* 公式にはないが、制限があり、「64KB」を超えると例外が発生する => 設計するに重要だから、ちゃんと明記したほうがいいと思うが、、、
サンプル
実行プロパティを設定するプログラム例
import sys import boto3 from awsglue.utils import getResolvedOptions glue_client = boto3.client("glue") args = getResolvedOptions(sys.argv, ['WORKFLOW_NAME', 'WORKFLOW_RUN_ID']) workflow_name = args['WORKFLOW_NAME'] workflow_run_id = args['WORKFLOW_RUN_ID'] workflow_params = glue_client.get_workflow_run_properties(Name=workflow_name, RunId=workflow_run_id)["RunProperties"] # 設定 workflow_params = { 'key_1', 'hello_world' } glue_client.put_workflow_run_properties(Name=workflow_name, RunId=workflow_run_id, RunProperties=workflow_params)
実行プロパティを設定するプログラム例
import sys import boto3 from awsglue.utils import getResolvedOptions glue_client = boto3.client("glue") args = getResolvedOptions(sys.argv, ['WORKFLOW_NAME', 'WORKFLOW_RUN_ID']) workflow_name = args['WORKFLOW_NAME'] workflow_run_id = args['WORKFLOW_RUN_ID'] workflow_params = glue_client.get_workflow_run_properties(Name=workflow_name, RunId=workflow_run_id)["RunProperties"] # 設定 result_value = workflow_params['key_1'] print('Result : ' + result_value)
【2】ジョブ パラメータ
サンプル:Python shell
ジョブ パラメータ「--a1 : Hello_World」を設定しておく
import sys from awsglue.utils import getResolvedOptions def main(): args = getResolvedOptions(sys.argv, ['a1']) print("Result is: " + args['a1']) if __name__ == '__main__': main()
関連記事
AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ Workflows / 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/10/223018
AWS Glue ~ 基本編 / ジョブ ~
https://dk521123.hatenablog.com/entry/2019/11/17/231505