フランス発のデータカタログ「Castor」を試してみた

2022.08.26

さがらです。

フランス発のデータカタログ「Castor」を試してみました。その内容を本記事でまとめます。

Castorとは

Castorは、記事名にもある通りフランスのパリに本社を置く企業で、データカタログのプロダクトを開発・提供しています。

2020年に創業した企業ですが、今年2022年6月にも$23.5Mの資金調達を行うなど、さらなる成長が見込まれる企業です。

また、Castor社の面白いところはModern Data Stackに関する情報をまとめたNotionを公開していることです。

各社がどういったサービスでデータ基盤を構築しているのか、各分野別のサービス一覧とCastor社から見た評価、といった内容がまとまっています。

下記のリンクからNotionを見ることが出来ますので、ぜひこちらも併せてご覧ください。

ログイン

まず、Castorですがすぐに使用できるフリートライアルはありません。Castor社に連絡を取り、環境を整備して頂く必要があります。

環境整備完了の連絡を受けたら、サインアップ用のページから各情報を入力してサインアップします。(私はGoogle認証を用いました。)

初めてのログインだと、このように初回ログイン時のガイドが出てきます。

接続設定

今回はCastorに対してBigQuery・dbt・Lookerを繋いで、それぞれのメタデータを収集してみたいと思います。また、Slackも連携設定をしておくことで、Slackでの議論を行ったスレッドのURLをCastorに連携する機能も試せるようにしておきます。

BigQuery

CastorからBigQueryのメタデータを取得するための手順は、下記のドキュメントにまとまっております。こちらの手順に沿って行っていきます。

まず、Google Cloud上でCastorと連携させるBigQueryへのアクセス権を持つサービスアカウントを作る必要があります。サービスアカウントの作成はGoogle Cloudの公式Docも参考にしてください。

作成したサービスアカウントには、以下のロールを付与してください。

  • BigQuery Read Session User
  • BigQuery Metadata Viewer
  • BigQuery Job User
  • BigQuery Resource Viewer

サービスアカウントを作成してロールの付与も完了したら、Castor上での設定に移ります。

Castorの画面左のSettingsを押した後、Integrationsタブを押します。

Data Warehouses欄から、BigQueryを選択します。

Castor Managedを選択します。

Source Nameに作成するソース名を入れます。任意の名称でOKです。

作成したサービスアカウントから生成できるCredential用のJSONの内容をコピーして、Credentials as JSON欄に貼り付けます。最後にSaveを押して、完了です。

無事に作成が終わると、このような画面が出てきます。2022年8月5日の9時35分に登録し、2022年8月5日23時4分にメタデータ収集完了していました。

dbt

Castorからdbtのメタデータを取得するための手順は、下記のドキュメントにまとまっております。

こちらのドキュメントを見ると、「One Shot Load」「Scheduled Sync」の2種類があります。今回はひとまず検証ということで「One Shot Load」の方法で進めます。

「One Shot Load」の場合は、ジョブの実行により生成されるmanifest.jsonをCastor社の担当者にSlackかメールで送ればOKです。

dbt Cloudの場合は、「本番用のEnvironmentで動かしたジョブにより生成されたmanifest.json」を指定するように注意してください。開発環境のmanifest.jsonだと、記述されているスキーマやテーブルが開発環境の仕様となっているためです。

dbt Cloudでの手順としては、本番環境で動かしたジョブのHisotryを開き、Artifactsの中からmanifest.jsonを取得すればOKです。

このdbtのメタデータ収集に関しては、他のDWHなどと同じくCastorの画面UIから設定できるようになると嬉しいですね!ここは今後のアップデートに期待です。

Looker

CastorからLookerのメタデータを取得するための設定をしていきます。

まず、LookerのAdmin権限を持つユーザーで、LookerのAPI Keyを生成します。この手順はこちらのDocをご覧ください。

下図のLookerの画面上でのCliend IDClient Secretが後工程で必要となります。

Looker側での準備は以上のため、Castorでの設定に移ります。

Castorの画面左のSettingsを押した後、Integrationsタブを押します。

Data Visualizations欄からLookerを選択します。

Castor Managedを選択します。

Source Nameに作成するソース名を入れます。任意の名称でOKです。

3項目それぞれを入力して、Saveを押します。

  • Host:使用しているインスタンスのURLの、https://からドメインまでをコピーして入れます。※Looker上でAPI Host URLを別途指定している場合はそちらを入力してください。
  • API Client Id:先程Looker上で確認したClient IDを入れます。
  • API Client Secret:先程Looker上で確認したClient Secretを入れます。

認証が上手くいけば、下図のような画面が出てきます。

また、LookerのExploreとダッシュボードをCastorに連携させるだけならここまでの内容を行えばよいのですが、DWH上のテーブルとLookerのExplore・ダッシュボードを繋げたリネージをCastor上で表示させるには、対象となるLookMLを管理するリポジトリの情報も必要です。

今回はリモートリポジトリをZipで圧縮したものをCastor社の担当の方に送付して対応頂きました。本番稼働時は、Castor社に対してリモートリポジトリのSSHのURLを送付し、Castorの画面からDeploy Keyの設定もすれば、自動で更新をしてくれるようです。

Slack

Castorの画面左のSettingsを押した後、Integrationsタブを押します。

Others欄からSlackを選択します。

右上のリストから連携したいワークスペースを選択した上で、「許可する」を押します。

対象のSlackアプリ上で、Castorが追加されたことを確認できたらOKです!

その他のツールとの連携

2022年8月26日時点、CastorのGUIからは下図のサービスの連携設定が出来ます。

これらのサービス以外にも、例えばBIツールだとTableau等と連携が出来るのですが、GUIから連携ができないサービスは別途Pythonを用いたコネクタが必要なようです。

各サービスごとにドキュメントもあるので、もしGUIから連携できないサービスをCastorに連携させたい場合には、参考にしてみてください。

Data

ここからは、BigQuery・dbt・Looker・SlackをCastorに連携したら出来ることを確認してみます。

画面左の「Data」を押すと、Castorに接続したBigQueryのプロジェクト、データセット一覧が出てきます。

データセットを選択すると、右側にそのデータセットに含まれるテーブル一覧が出てきます。

Columnsタブ

各テーブルを押すと、Columnsタブが選択された状態で下図のような画面になります。

dbtを連携しているので、Descriptionにdbtのdescriptionが記載されていますね。

また、各カラムのAction列を見ると、そのカラムに対して4つのアクションを取ることが出来ます。Primary KeyやPII(個人情報)の設定をクリックするだけで簡単に行えるのは楽でいいですね。

  • 対象のカラムを、カタログ上でPrimary Keyとして設定する

  • 対象のカラムを、PIIとして設定する

  • 対象のカラムの説明画面へのリンクをクリップボードにコピーする

  • 対象のカラムに紐づく、列レベルリネージを表示する(列レベルリネージの画像は2枚目)

次に、画面右側では、このテーブルのオーナーを設定、このテーブルに対して発行されたクエリ数からこのテーブルの相対的な人気度合いを見る、タグ付け、Descriptionの確認、などを確認することが出来ます。

Read meタブ

対象のテーブルのDescriptionを見るだけでなく、このテーブルに関連するアセットを確認することも出来ます。

関連するアセットを追加する際には、Pinned assetsの横の「+」マークを押して、TablesKnowledgeDashboardsFieldsを関連づけることが出来ます。

Lineageタブ

Lineageタブでは、DWH上のテーブル~BIツールのダッシュボードまでのリネージを確認することが出来ます。

Lineageタブを押した段階では、対象のテーブルの親にあたるオブジェクトがSourcesに表示され、対象のテーブルの子にあたるオブジェクトがChildrenとして表示されます。

実際のリネージを図として見たい場合には、下図の赤枠内を押せば見ることが出来ます。リネージ上の右上のDashboardを押すと、実際のLookerのダッシュボードへリンクも出来ます。

また、リネージ上でも「+」を押すことで、更に親や子にあたるオブジェクトを展開することが出来ます。

Queriesタブ

Queriesタブでは、対象のテーブルに対して実行されたクエリを表示することが出来ます。注意点として、2022年8月時点では30単語以上のクエリでないと抽出されないようです。(適当に投げられたクエリ、select * from tableなどは対象外としている)

Commentsタブ

Commentsタブでは、対象のテーブルに対してCastor上でコメントが出来ます。

Historyタブ

対象のテーブルに関するDescriptionの変更履歴をたどる事ができます。

試しにカラムのDescriptionを追加してみると、Historyタブですぐに確認が出来ました。

Dashboards

画面左の「Dashboards」を押すと、Castorに連携したBIツール上にあるダッシュボードが表示されます。Lookerの場合には、ダッシュボードだけでなく、Look、Exploreも表示されます。

各ダッシュボードを押すと、詳細画面に移動します。テーブルと同じ様に、Read me、Lineage、Comments、History、という4種類のタブがあります。(機能はテーブルと同等のため、説明は割愛します。)

Knowledge

Knowledgeは、Castorに登録されたテーブルやダッシュボードなどの各種アセットに関する使い方や注意事項を蓄積することが出来る機能です。

新しいKnowledgeを追加するには、画面左のKnowledgeの横の「+」を押すと、新しいページを立ち上げる事ができます。

簡易的なWikiのような形で編集することが出来ます。(Markdownは使えませんでした。)

Pinned assetsとして、各テーブルやダッシュボードなどと紐づけることも可能です。

ちなみに、KnowledgeからPinned assetsをしたオブジェクトでは、Mentioned inという欄にKnowledgeへのリンクが追加されていました。

検索機能

これまでCastorで確認できることを中心に説明してきましたが、Data、Dashboards、Knowledge、すべて検索ボックスから検索も可能です。

Castorの画面の一番上に検索ボックスがあるので、ここから検索が可能です。

日本語での検索も可能です。「テーブル」と検索してみると、Dashboards、Tables、Definitions(Knowledgeとか)が検索結果として出てきます。

またShow moreを押すと、より詳細な検索画面を表示することが出来ます。検索対象のオブジェクトを絞り込んだり、PIIが付いているもの、特定のタグ、などで検索することも可能です。

SlackからCastorに議論した内容を連携

Castorは、事前にSlackにCastorのアプリを入れて連携をしておくと、各テーブルやフィールドの詳細画面のリンクをSlack上で貼り付けて投稿した際に、そのスレッドへのリンクをCastorに連携出来る機能があります。

まず、適当にCastorでテーブルの詳細画面を開き、ページリンクをコピーします。

このリンクをSlackで貼り付け。適当なテキストと併せて投稿してみます。

すると、Castorのアプリを入れている場合、対象のテーブルのDescriptionと併せSave thread link in castorというボタンが出てきます。このボタンを押すと、Castor上で対象のテーブルのCommentsタブで、スレッドの一番最初の投稿のテキストと共に、Slackのスレッドへのリンクが表示されます。

このような形で、Slack上でのデータに関する議論もすぐに連携可能です。Slack上で何か確認したい際は、関連するURLを貼ることはよくあるケースだと思いますので、ちょっとしたナレッジも逃すことなくCastorで一元管理できる、素晴らしい機能だと感じました!

People

Peopleでは、Castor上で管理するユーザー一覧を表示できます。

Castorでは接続しているサービス上のユーザーも収集するようで、下図ではLooker上のユーザーに対して「Invite to Castor」でCastorに招待することが出来ます。(もちろんこの導線以外でもCastorから直接ユーザーの招待は可能です。)

また、各ユーザーを押すと、各ユーザーがCastorに連携しているサービスにおいて、どんなクエリを発行しているか、どのテーブルを見ているか、どのダッシュボードを見ているか、Castor上で関わったKnowledgeはどれか、Castor上でどんな書き込みをしているか、ということが各タブからわかるようになっています。

Governance

Governanceでは、Castorと連携しているテーブル・フィールドに関して、同じ名前のフィールドがあれば、まとめてdescriptionを定義できる機能です。

例えば、下図のようにcustomer_idというカラムに対して、dbt経由で「Primary key」とDescriptionを設定していたとします。

このとき、Governanceからcustomer_idを押すと、「2 columns with this description」ということで、「Primary key」が2つのcustomer_idというカラムで既にdescriptionとして定義されているよ、と教えてくれます。

この状態で、Propagateを押してみます。

下図のように、Castorに連携されているcustomer_idを持つテーブルの一覧が出てきます。Select allを押して全て対象にした上で、右下のSaveを押してみます。

すると、元々Descriptionが空白だったcustomer_idに、「Primary key」というDescriptionが入りました。カラム名が同じだとほぼ説明も同じだと思いますので、この機能があれば簡単にDescriptionを埋めることが出来ますね!

ちなみに、各テーブルの詳細画面からも、Description欄が「See suggestions from other tables」となっている場合にその箇所をクリックすると、他のテーブルで定義済のDescriptionが候補値として表示されます。

最後に

フランス発のデータカタログ「Castor」を試してみました。

UIがわかりやすいためマニュアルを見ずとも直感的に操作ができるだけでなく、Slackで行った議論をすぐに確認できるようにSlackのスレッドURLをCastorに連携できたり、一度定義されたdescriptionを再利用できたりと、データカタログ導入後の課題である「運用負荷」を削減できる機能が多く備わっていることがとても良いなーと感じました!

まだ創業後2年しか経っていないと考えると、これからもユーザーフレンドリーな機能が多く実装されていくのだと思います。今後がとても楽しみなデータカタログです!