Alteryx ServerのメタデータDBを直接参照してコレクションに含まれるワークフロー名を取得するワークフローを作成するテクニック

2020.09.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。

データアナリティクス事業本部ソリューション部プリセールススペシャリストの兼本です。

Alteryx Serverは自身のリポジトリ管理用のデータベースとしてMongoDBを採用しています。そしてAlteryxはMongoDBへの接続もサポートしているため、これらのデータにアクセスするワークフローを作成することも可能です。

今回は、Alteryx Serverのリポジトリを管理しているMongoDBにアクセスしてコレクションに含まれるワークフローの名前を取得する方法をご紹介します。

注意!:今回はMongoDBからのデータ読込のみを行いますが、Alteryx Serverが利用するリポジトリデータに対して外部からデータ書込を行うと、意図しない動作につながる可能性がありますのでご注意ください。

MongoDBへのアクセス

Alteryx Serverセットアップ時に構築されるMongoDBにアクセスするための情報は、System Settingsの「Controller>Persistence」ページで確認できます。

ホスト名はlocalhostになっていますので、Alteryx Server以外の端末からMongoDBにアクセスする場合は、実際のホスト名もしくはIPアドレスに変更してください。また、接続を許可する端末から27018番ポートへのアクセスができるようにセキュリティ設定を変更します。
パスワードはデフォルトで非表示になっていますが、テキストボックス右のアイコンをクリックすることで表示できます。

必要な情報を確認出来たら、Alteryx Designerで新規にワークフローを作成し、コネクタタブから「MongoDB入力」ツールを配置します。

設定は以下のようになります。基本的には上述のSystem Settingsで取得した情報を指定するだけですが、データベース名とコレクション名は、Alteryx社のサポートサイトで公開されているスキーマ情報を参照します。

今回は、Alteryx Galleryのコレクション一覧を取得したいので、データベースとして「Alteryx Gallery」を、コレクション名として「collections」を指定します。

コレクションの一覧を取得

この状態でワークフローを実行すると、以下のようなデータを取得できます。

コレクション名がNameフィールドに格納されていることはすぐにわかりますが、コレクション内のワークフローはApps.0.ApplicationId , Apps.1.ApplicationId , Apps.2.ApplicationId, ..., Apps.n.ApplicationIdという形式で列挙されています。

以下のような処理を作成して、このデータをアンピボットし、データ整形します。

これでコレクションごとに含まれているワークフローの一覧を取得することができました。

が、ここにはApplicationIdしか含まれておらず、ワークフローの名前は格納されていません。

ワークフローの一覧を取得

というわけで、もうひとつMongoDB Inputツールを配置して、ワークフローの一覧を取得します。ワークフローのデータは「AlteryxGallery」データベースの「appInfos」コレクションを参照することで取得できます。
「Revisions.PrimaryApplication.FileName」にワークフローのファイル名が格納されていますので、ワークフロー名を取得できそうです。

最初に取得した「collections」のApplicationId と2番目に取得した「appInfos」の_idをキーとしてジョインします。ただし、_idは、「{ "$oid" : "5c8b45e2431e670698180798" }」といった形式でデータが格納されているため、事前にフォーミュラツールなどを使ってApplicationId に合わせたデータ加工をしておきます。

実際のワークフローは以下のようになります。

ワークフローを実行して、コレクションごとに含まれているワークフローの一覧が作成できていることが確認できました。

まとめ

Alteryx Serverのリポジトリ情報を格納するMongoDBにアクセスして、メタデータを取得するワークフローを作成する方法についてご紹介しました。興味のある方はぜひ挑戦してみてください。

以上、最後までお付き合いいただきありがとうございました。