今回から新シリーズのAlteryxベストプラクティスシリーズを始めたいと思います。今回は、Alteryx ACE Claire氏のInspire 2024でのBreakout Session「Workflow Strategy:Practical Application Deep Dive」を元にした、ワークフロー開発戦略についてとなります。
ワークフロー開発戦略について
Alteryx ACE Claire氏のInspire 2024でのBreakout Session「Workflow Strategy:Practical Application Deep Dive」は、ワークフローを開発する際に、何を重点的に考えながら開発するか、という視点で非常に示唆に富んだ内容となっていました。
セッションの概略としては、「ワークフローを作成する際、「一般化」「拡張性」「保守性」の3つについて注意を払い、それぞれのバランスを取る必要がある。」ということです。
それぞれの中身について少し見ていきたいと思います。
一般化(Generalizability)
一般化は、「動的なワークフロー構築」という言い方もよく聞きます(私もこの言い方をすることが多いです)。
講演の中では「もし作成したワークフローのインプットが変化したら、果たして動きますか?」という問いかけがありました。これが「一般化」です。
Alteryxのワークフロー(実はプログラミング言語でも同様ですが)では、作り方によって、何かが変化すると途端にエラーで動かなくなったり、多少変化があっても問題なく動く、という風に変化に対しての差が大きくなります。例えばインプットデータに余計なカラムが増えただけでエラーで止まる、というワークフローもあれば、インプットデータのカラムが少々変わったところで問題なく動く、というワークフローもあります。
もちろん動的に作る方が手間はかかりますが、場合によっては大した手間ではないこともありますし、めちゃくちゃ手間になることもあります(これはもう内容次第です)。ただし、想定できない変化まで先んじて対応するのは非常に難しいです。
代表的な対応策について記載してみます(一部は講演内容からの引用も含みます)。
- Unknownはチェックを外す(ツールによっては余計な列があると結果がおかしくなる)
- クロスタブツールの結果のカラムを計算に使う場合は、なくても動くように作り込む
- 横持ちではなく縦持ちで処理をする
- 動的選択、動的リネーム、動的入力を活用する
- マクロ化する(同じような処理を何度もしている場合)
- バッチマクロでワークフロー内で動的にパラメータを変えて処理を行う
こちらはClaireさんがブログ化してくれています。ぜひご覧ください。
Implementing Workflow Strategy: Generalizability
拡張性(Scalability)
拡張性は、日本語でもスケーラビリティとよく言われますが、ここでのスケーラビリティは、データ量が増えたときにワークフローが利用し続けられる速度を保てるか、ということです。
講演の中では、「このワークフローはもっとデータが増えても動きますか?」と問いかけがありました。
とりあえず現状のデータ(もしくはテストデータ)で作ったとして、本番のデータのデータ量が多すぎてめちゃくちゃ実行に時間がかかる、というケースもあるかと思います。もしくは、徐々にデータ量が増えるような性質のデータを取り扱っている場合に、1年後は想定の10倍完了まで時間がかかる、というケースもあるかもしれません。
実は、データ量が多い場合のワークフローの構築の仕方、というのが存在します。いくつかのツールは遅いので(有名なのはデータクレンジングツールです)、データ量が多い場合は使わないほうが良いケースもあります。経験的に、GISデータはかなりデータ量が多いケースが多いため、ワークフローの構築には気をつける必要があります。
代表的な対応策について記載してみます(一部は講演内容からの引用も含みます)。
- データクレンジングツール、オートフィールドツールは使わない
- 列を増やしすぎないようにする(特にクロスタブツールには要注意)
- なるべくメモリ内に収まるように構築する
- 不要な列は削除
- 不要なツールは削除(特に閲覧ツール)
- バッチマクロで分割処理する
- 反復マクロ、バッチマクロは避ける
- フィールド付加ツールの結果に気をつける
- 正規表現ツールは他ツールや関数でなるべく代替する
- DBデータの場合
- In-DBを活用する
- WHERE句でデータを絞り込む(集計も有効)
- Designer CloudのNativeモードを活用する(Databricks、Snowflake)
ここで言う拡張性に関しては、取り扱っているデータの性質にかなり依存するため、もともとのデータ量、今後のデータ量の増え方など事前に理解しておくことが大切です。
この内容については、Claireさんがブログ化してくれているので、ぜひご覧ください。
Implementing Workflow Strategy: Scalability
保守性(Maintainability)
保守性は、意外と忘れ去られがちなところがあるのですが、チームで運用するような場合には非常に重要なトピックです。個人でしか使わない場合は、ワークフローをすべて理解できているのでメンテナンスに困ることは無いと思いますが、実はこれも罠です。1年に1回しか使わないようなワークフローもあると思いますが、1年後になにかエラーが出たときに、「これなんだっけ?」となることはよくある話です(プログラミングと同じですね)。
講演の中では、「誰かがこのワークフローを見たときに、どれくらい簡単に理解できますか?」と問いかけられていました。「ワークフロー」の部分は、「ロジック」や「ツール」と言い換えることもできます。
確かにプログラミング言語よりはデータ処理フローが可視化されているので、頭から見ていけば理解できないものでもないのですが、ちょっとしたワークアラウンドで挟んでいるツールや、謎の計算式などがあると、後から見る人は混乱します。基本的に他人が保守する前提でワークフローを構築するべきでしょう。
代表的な対応策について記載してみたいと思います(一部は講演内容からの引用も含みます)。
- コメントをなるべく入れる
- コンテナツールでなるべく処理をブロック化し、処理にタイトルをつける
- 不要なツールは削除する(意図的に入れているツールがあればその意図を記載する)
- 正常に実行できているときは、「エラー」「ワーニング」「変換エラー」が出ないようにしておく
- SQLでSELECTする際は、*を使わずに明示的にカラム名を記載する
- インプットが正しいかどうか検証する
エラーなどが出ないように作り込む場合については、Claireさんがブログ化してくれているので、ぜひご覧ください(日本語版は私が翻訳しました)。かなりマニアックなテクニックもあるのでぜひ・・・。
Preventing Workflow Warnings: A Field Guide(日本語版)
どの戦略を重要視するか
講演の中では、入力するデータの性質を理解しておくことで、3つの戦略のうちどこに重点を置くかを決めることができる、とありました。
つまり「データ環境」「処理の文脈」「キーステークスホルダー」について事前に調査することで戦略を立てることができます。
- データ環境
- 組織規模
- データソースの種別(システムかローカルの手作業のファイルか)
- データソースの性質(生成頻度・データ量)
- 処理の文脈
- ユーザーの手作業なのかシステムから吐き出されるものなのか(システムのファイルであっても、入力を人間が行っている場合もあります)
- 複雑なデータ加工やクレンジングが必要か
- インプットデータの更新頻度
- 加工ロジックの変更頻度
- キーステークスホルダー
- 開発者と利用者の人数や割合(Alteryxに慣れている人がどれくらいいるか)
- 分析アプリやServerのGalleryの運用度合い
これらの視点で情報を集めることで、どの戦略を重視するか、を決めることができます。
例
データソースがローカルのファイル(ExcelやCSV)の場合は変化する可能性が高いです。ローカルのファイルの中でも、別のシステムから出力したようなケースでは、変化する可能性が低いように思われますが、元のシステムにも気をつけてください。システム側で入力が柔軟になりすぎている場合に、データの信頼性が著しく低い場合があります。
変化する可能性の大きい手作業のローカルファイルを含むような場合、一般化>保守性>拡張性、の順番になります。ローカルのファイルの場合は、データ量が比較的少ないためです。
データベースがデータソースの場合、変化は少ないですが、データ量が多い傾向にあります。ただ、やはり取り扱うデータによってかなり異なってきます。WEBのアクセスログやPOSデータであれば時間の経過に応じて非常に莫大なデータ量になりますし、一方で売上ダッシュボードなどを作成するためのインプットの場合、直近数年のデータだけあれば十分で、意外とデータ量が少なかったりします(会社規模にもよりますが)。大規模データの場合は、拡張性>保守性>一般化になるケースが多いかと思います。
戦略を立てるには非常に多くの考慮すべき要素があるため、情報を集めて慎重に検討することをおすすめします。
まとめ
今回は、ワークフロー構築の戦略について、Alteryx ACE ClaireさんのInspire2024での講演およびブログシリーズに基づいてブログにまとめてみました。細かいところまで書くとブログのボリュームが膨大になりそうなので、各戦略についてはポイントだけ記載しています。テクニック的なところはまた別途書くかもしれませんし、出典元のClaireさんのブログを見ていただければと思います。
いずれの戦略を採用しても、ただ作るよりは手間(工数)がかかります。構築する際に最初からわかっていればそれほど工数がかからない解決策もあります。いずれにしても、すべてに対応したワークフローを作るのはそれなりの手間を見込む必要があります。ワークフローの重要性によってはいずれかを考慮せずに作る、ということも考えられますし、ワークフローを作成したときはそれがどこまで運用に乗ってくるか、というのもわからないため、将来的に利用するかどうかわからないものに対して大きな手間をかけて作るのは無駄、という考え方もあるでしょう。
いずれにしても、戦略立案のために情報を集め、重点とする戦略を決め、ワークフローを構築しているのが重要なポイントです。
コメント