最新版のDesignerではもはや完了までブロックツールが必要なく、コントロールコンテナがあれば十分ではありますが、何かしら使えないケースもあるのと、改めて完了までブロック(BUD)ツールの動きを検証しておきたいと思います。
完了までブロックツール(Block Until Done)は名前が長いので、英語の頭文字を取ってBUDツールと短縮してこの記事では扱います。
Designerのデータを流す順番
まずBUDの前にDesignerはどのようにデータを流す順番を決めているのでしょうか?
Helpによると、ツールを置いた順に決まる「Tool ID」の小さい順に実行される、と記載されています。確かに、実行する際にどこから始めるか、は何らかの決まりに従って選ばれているはずです。経験的には、100%そうなの?という部分はありますが、概ねこのルールに従っているように思います(なぜかツールID2から実行されたり、という謎のケースはありますが・・・)。
E1エンジンの場合、1レコードずつデータを動かし、ブロッキングツールでブロックされるまで処理を行う、というのが基本的な動きです。AMP Engineの場合もデータはパケットにいくつかのレコードがまとめられ、マルチスレッドで並行的に動く、という以外の動きは同じようです。
簡単なサンプルで確認する
以下のような簡単なサンプルで確認してみましょう。ツールIDはカッコ内に表示された数字です。

ポイントは、BUDについている番号はどのように動くのか、というところです。ツールID順に動くのであれば、以下のような順番になることが考えられます(つまりツールID順)。

結果は以下の通りです。

ログの通り、ツールID順になっておらず、BUDのアンカーの数字順にデータが出ているようです。
BUDが2個あるときのサンプル
次のワークフローは、BUDが2個あるパターンです。ワークフローの中に独立したデータストリームが上下2つあると考えられます。この場合、上側がBUD直前のツールのIDが最も小さいのでこちらが先に動く形になります。

実際の動作ログは以下のとおりですが、上のワークフロー内の数字は実際のログ上で動作した順番です。

ここから読み取れるのは、やはり上側の部分が先に動作し、BUDからそのままデータ出力まで進んでいます。その後に下側のデータストリームに処理が移っています。
Helpにある通り、複数のBUDツールがある場合は、上流に接続されているツールのIDが小さい方が先に動く、というものでした。
BUDの下流で別のデータと結合する場合
次は、BUDの下流で別のデータと結合する場合です。

数字内は実際に動いた順番です。ログは以下の通り。

これによると、BUD1よりBUD2からつながっているデータ出力ツールが先に保存完了しています。どういうことでしょうか?
テキスト入力は若いほうが読み込まれており、そのままBUDまで進んでいます。その後、BUDの1が動作し、集計ツールまで動いています。その後なぜかBUDの2の出力側のメッセージツールが動き、そのままデータ出力がされています。その後、別のテキスト入力で読み込まれ、フィールド付加が完成、そのままデータ出力まで進んでいます。
実際BUDの1側が2より先に動いているのは確かですが、集計ツールで一度止まっているように見えます。
これは、フィールド付加ツールの時点でS入力にデータが来ていないため、一度処理を終了させ、BUDの出力2側が動いた、と解釈可能です(出力2側のIDがフィールド付加ツールのIDよりも小さいためこちらが動いてもおかしくない)。もし、テキスト入力(12)がもっと早く動いていればフィールド付加からそのまま出力まで動いた可能性が高いです。
ちなみに、これはAMP Engineで実験を行っており、E1エンジンにするとなぜかテキスト入力がすべて先に動くため、BUDの出力1に接続したデータ出力が先に終わっています。E1エンジンの場合は入力を先に読み込むというアルゴリズムが入っているのでしょうか?

まとめ
- Alteryxのデータの流れ方を確認しました
- BUDの出力は番号順に流れるようです
- 複数
- BUDが複数ある場合は、BUDの上流のツールのIDが小さなものから実行されます
- BUDの下流でブロッキングツールや結合などが入ってくると、出力の最後まで走らずに別の下流に処理が移ることがあるので注意しましょう
- 確実に処理を流したいときは、「WeeklyAlteryxTips#61 異なるスキーマのデータを同じExcelブックの異なるシートに保存する1」で紹介したような方法を取って下さい
サンプルワークフローダウンロード
次回
未定です。
コメント