はじめに
データアナリティクス事業本部のkobayashiです。
GoogleCloudのWorkflowsでリストを操作するprepend
関数が追加されていたのでこの挙動を確かめつつ、Workflowsでのリスト操作を行ってみたのでまとめます。
Workflowsで使えるList操作の関数
Workflowsでは公式ドキュメント(Function: list.concat | Workflows | Google Cloud )によると以下の2つの関数が使えます。
list.concat
: リストの最後に値を追加するlist.prepend
: リストの先頭に値を追加する
2つとも既存のlist型の値に対して新しい値を追加する関数になります。戻り値はどちらともlist型になります。
では実際にWorkflowを作って試してみたいと思います。Workflowsではyaml定義を使ってWorkflowを作成できるので以下のyamlを使います。
wf-operate_list.yaml
main:
steps:
- assign_value:
assign:
- list_val: [ "apple","orange","banana" ]
- logging:
call: sys.log
args:
text: ${list.concat(list_val, "melon")}
severity: INFO
- logging_2:
call: sys.log
args:
text: ${list.prepend(list_val, "grape")}
severity: INFO
- logging_3:
call: sys.log
args:
text: ${list.concat(list_val, ["kiwi","peach","lime"])}
severity: INFO
ステップで行っていることを簡単に説明します。
- assign_valueステップ
- list型の変数を定義する
- loggingステップ
- assign_valueステップで定義したリストに
list.concat
で値を最後に追加する
- assign_valueステップで定義したリストに
- logging_2ステップ
- assign_valueステップで定義したリストに
list.prepend
で値を先頭に追加する
- assign_valueステップで定義したリストに
- logging_3ステップ
- assign_valueステップで定義したリストに
list.concat
で値(list型)を最後に追加する
- assign_valueステップで定義したリストに
ではこのyamlを使ってWorkflowを作成して実行結果を確認してみます。
$ gcloud workflows deploy wf-operate_list --source=wf-operate_list.yml --service-account 11111111111-compute@developer.gserviceaccount.com --location asia-northeast1
$ gcloud workflows run wf-operate_list --location asia-northeast1
実行結果をCloud Loggingで確認してみます。
2023-02-27 11:44:11.849 JST
["apple","orange","banana","melon"]
2023-02-27 11:44:12.085 JST
["grape","apple","orange","banana"]
2023-02-27 11:44:12.325 JST
["apple","orange","banana",["kiwi","peach","lime"]]
loggingステップではconcat
関数でリストの最後に値が追加され、logging_2ステップではprepend
関数でリストの先頭に値が追加されています。
logging_3ステップについてはリストの最後にリストが追加されてリストが内包された状態になっています。concat
関数の挙動としてはあくまでリストの最後に値を追加する関数なので当然の結果となります。では、リストを結合するにはどうすればいいかというとIteration
でリストの反復処理を行う方法を使います。
wf-operate_list2.yaml
main:
steps:
- assign_value:
assign:
- list_val: [ "apple","orange","banana" ]
- loop_list:
for:
value: fruit_name
in: ["kiwi","peach","lime"]
steps:
- add_list:
assign:
- list_val: ${list.concat(list_val,fruit_name)}
- logging_list:
call: sys.log
args:
text: ${list_val}
severity: INFO
ステップで行っていることを簡単に説明します。
- assign_valueステップ
- list型の変数を定義する
- loop_listステップ
- 結合したいリストを
for
を使って反復処理する
- 結合したいリストを
- add_listステップ
- loop_listステップで反復された要素をassign_valueステップで定義したリストに
list.concat
で最後に追加する
- loop_listステップで反復された要素をassign_valueステップで定義したリストに
このyamlを使ってWorkflowsを作成して実行結果を確認してみます。
2023-02-27 11:45:12.551 JST
["apple","orange","banana","kiwi","peach","lime"]
期待した通り[ "apple","orange","banana" ]
と["kiwi","peach","lime"]
が結合されたリストが取得できました。
まとめ
GoogleCloudのWorkflowsでリストを操作する関数を使ってみました。リストに要素を追加するのには便利に使えます。一方、リスト同士の結合に関してはIteration
を使って地道に結合するしかありません。これらのリスト操作の使い道としては、任意のstepからの返り値をリストに追加して後続の処理でそのリストを使うといったことが考えられるかと思います。
最後まで読んで頂いてありがとうございました。