Dataplex(旧Data Catalog)によるデータカタログについてあれやこれやれやをまとめておいたポインタが欲しくなってきたので、とりとめもなくつらつらと書きます。
注意点:
- BigQuery on GCPの運用を前提に書いてます
- Dataplexはデータカタログ以外の機能もたくさんありますが、データカタログの観点にフォーカスして書いてます
- 論理的なデータ構造を作成したり、それに基づいた権限管理など
- 少人数のチームでデータ基盤を運営しており、データカタログの運用自体に工数をなかなか割けない前提で書いてます
- 自前で作ることも難しいし、ましてそれを継続的に運用するのはさらに難しい
- 「データカタログ」という言葉が指すスコープも色々ありそうですが、「検索 + メタデータ管理」くらいのスコープで書いてます
- 包括的に書くつもりはないので、漏れてる観点は多いと思います
データカタログがなぜ必要か
大まかには3つくらいの観点がありそう。
DWHやデータマートの利用者観点(アナリスト / データサイエンティスト / bizdev):
- DWHやデータマートに多数散らばっている中で自分に有用そうなテーブルを探したい
- テーブル名をexactに覚え切れているわけではない、曖昧検索したい
- テーブル名以外からも検索したい、カラム名やdescriptionにもヒントがあるはず
- BigQueryの画面だと、テーブル名のexactな検索か部分一致しかできないし、ソート順も指定できない
- テーブル名をexactに覚え切れているわけではない、曖昧検索したい
DWHやデータマートの作成者観点(データエンジニア / アナリティクスエンジニア):
- 利用者からの問い合わせコストを減らしたい
- 都度回答していると時間が足りないし、スケールしない
- help your own
- 作成者とはいえ、DWHやデータマートの全てのテーブルの仕様を把握するのは現実的には困難
- SQLの定義を辿るのが一番正確ではあるが、ショットカートできるようにしたい
- 関連チームとのインターフェイスを揃える
- 「ここを見てください(to ユーザーサイド)」「ここに書いてください(to データソースサイド)」と言える場所を一元的に管理したい
- 複数あると覚え切れないし、管理コストも増える
データソースの提供者観点(アプリケーションエンジニア / SRE):
- 自分が提供しているデータが誰に使われているかの把握
- 提供しているデータの種類も多いし、自分が認知していなかったけどいつの間にか社内で使われていた、ということはよくある
- 問い合わせコストを減らしたい
- DWH作っている人からの問い合わせもあるし、データ利用者から問い合わせがくるときもある
Dataplexのデータカタログが提供してくれる機能
検索
データカタログのある意味一番大切な機能はやはりここ。
- 多彩な検索方法
- 組織内にGCPのプロジェクトが多数ある場合、プロジェクトを横断して検索できるのは便利
- データセットを探したいのか、テーブルを探したいのかといった粒度も指定できる
- UDFやマテビューに絞る、というのもボタンポチポチで検索できる
- 検索語に対する関連度合いや最終更新日などソート方法も指定できる
- お気に入り(スター)に入れた対象のみの指定もできる
- 検索対象の範囲の広さ
- BigQueryのテーブルだけでなく、GCSやBigTableやpubsubなどもサポートされている
- GCPを使っていると、自然とDataplexが自然とクロールしてくれるので手間がかからない
- 手間があったとしてもCatalogのAPIを有効化する、くらいでよい
- 自前で登録すればAWSなどGCP外のリソースを対象に含めることも可能
- IAMとの連携
- 「このデータは誰に見せてよいか」はIAMと連携されるので、管理コストが減らせる
メタデータ管理
検索に負けず劣らず、データカタログに求められていること。
参照できる情報:
- テーブルのdescriptionや最終更新日など、BigQuery上で見れる情報も当然ある
- データリネージ
- dbtやdataformを使っていると、うれしさがそこまでないようにも思うかもしれないが、そんなことはない
- 組織内ではdbtやdataform以外でリソースを作成する場合も多い
- 例: 開発ではdigdag、bizdevではGASで定期的にテーブル作成
- 組織内ではdbtやdataform以外でリソースを作成する場合も多い
- dbtやdataformを使っていようが使っていまいが、データリネージを一元的に確認できるというのはめっちゃありがたい
- 毎度INFORMATION_SCHEMAのreferenced_tablesを使ったクエリを書く必要がない
- INFORMATION_SCHEMAのことを知らない人にも案内しやすい
- dbtやdataformが不要になる、という話ではもちろんない
- リネージだけでなく、そのテーブルを作ったときのDDLも表示できる
- 「このカラム、めっちゃNULLばっかり入ってるけど、どういうロジックで作られてるんだ...」を確認する術にできる
- リネージにはBigQueryのテーブル以外にもGCSなども対象に含まれている
bq load
でロードしたようなものでも勝手にリネージ対象に入れてくれる- 「テーブルは削除したけど、GCSに元データが残ったままになってたね...」というような事態にも気付ける
- dbtやdataformを使っていると、うれしさがそこまでないようにも思うかもしれないが、そんなことはない
- 直近30日でのクエリされた回数
- テーブルを廃棄したいときなどにさっと確認できて便利
- 「誰が見てたか」などは流石に分からないので、INFORMATION_SCHEMAを引きましょう
- テーブルを廃棄したいときなどにさっと確認できて便利
管理できる情報:
- ラベルやテーブルのdescriptionなどBigQuery上で管理できるものも当然ある
- BigQueryのtable descriptionとは別にdataplex上には
Overview
というのがある- こちらはwysiwygでリッチに情報を定義することが可能なようだ
- BigQueryのtable descriptionとは別にdataplex上には
- タグ(テンプレート)
- BigQueryのデータセットやテーブルにラベルを振ることはできる
- ラベルはBigQueryに限らず、GCPのリソースで割と幅広く使える
- 例えばBigQueryのjobにラベルを付与することもできる
- ラベルはBigQueryに限らず、GCPのリソースで割と幅広く使える
- 一方でラベルはあまり高度なことができるわけではない
- 単純なkey-valueしか持たせることができず、例えばdatetimeを指定できなったり、enumで特定の種類しか選択できない、といったことはできない
- タグテンプレートではより柔軟に指定できる
- 必須フィールドやオプショナルなフィールドといった指定もできる
- どういうタグフィールドを指定すると便利はか公式から出ているものを参考にするとよい
- 品質やデータの保持期間、データの更新頻度など
- 活用例: BigQueryのテーブルのメタデータをCloud Data Catalogで管理する - yasuhisa's blog
- 便利な一方、「どこで管理するのか」は現状よい解がなさそう...
- ラベルであればdbtに情報を付与して、BigQueryに反映させることができる
- 一方で、タグテンプレートはAPIやsdkはあるものの、テーブル管理で使うdbtやdataformとの連携は現状まだ十分とは言えず、自前で別途管理する必要がある
- BigQueryのデータセットやテーブルにラベルを振ることはできる
- Business terms
- 割と最近付いた機能。いわゆるビジネス用語集をdataplex内で管理できる
- 用語や定義を一元管理し、それに関連するカラムに紐付けることができる
- 複数のチームがデータを使っていると用語がずれて認識合わせに時間がかかることもあるので、ユビキタス言語を社内に展開していく際にも有用
Dataplexでのデータカタログのメリット / デメリット / 要望
メリット
- 何といってもマネージドで手間がかからない
- APIを有効にしておけばある程度よしなにやってくれる
- 料金が安い
- データカタログのSaaSを導入しようと思うと、それなりのお金がかかる
- それと比べると、データカタログはかなり導入が容易
- セキュリティ観点
- データカタログのSaaSを使う場合は、メタデータ相当の権限をGCP外に渡す必要が出てくることが多い
- データ自体の閲覧権限ではないが、外部に情報を出すことにはなるので、ハードルとしては多少高くはなる
- データの分布(min / max / distinct countなど)の簡易的な分析をしてくれるものも存在し、その場合はデータ自体の閲覧権限を渡す必要がある
デメリット
OpenMetadataやSaaSとしてデータカタログを提供しているもの(例: DataHub)と比較した場合を考えます。
- 高度な機能はdataplexと連携し切れているわけではない
- 例えば、データの分布(プロファイリング)や品質テストの結果をdataplex上で現在見れるわけではない
- dbtなどでテストされた情報をcatalogに同期できるわけではない
- タグテンプレートを使えばやることはできると思うが、手間は必要
- ref: Great Expectationsを使ったBigQueryでのデータバリデーション
- ref: Data Docs — great_expectations documentation
- dataplex自体にはデータプロファイリングの機能自体はあるものの、catalog側との連携は現在まだサポートされていない
- が、これは連携されるのは時間の問題かなとは思ってます
とはいえ、データカタログ単体のプロダクトは組織によってはtoo muchな機能であったり、OSSにしても運用が回るかといった課題はあるので、Dataplexによるデータカタログで十分、というケースもかなりあるのではないかと思います。
Dataplexでのデータカタログに対する要望
- BigQueryとの連携をさらに強化して欲しい(マジで切実)
- Dataplex側でリッチなメタデータの情報を付与した場合、BigQuery側にもそれが見えるように連携して欲しい
- 例えばタグテンプレートとかビジネス用語集はdataplex上でしか見えない
- 特にビジネスユーザーがデータを触るときの起点はBigQueryであることが多く、せっかく情報を付与しても活用し切れないわけなので、めちゃくちゃ歯痒いです
- BigQuery側からDataplex上のカタログへのリンクが追加される、などでもよい
- Dataplex側でリッチなメタデータの情報を付与した場合、BigQuery側にもそれが見えるように連携して欲しい
- カラム列のdescriptionで検索がヒットした場合に、検索結果でも確認できるようにして欲しい
- 一度、テーブル側を確認しに行かないといけないので手間が多い
- terraformなどの連携の強化
- タグテンプレートやビジネス用語集などはIaCとして定義を管理したいことも多いですが、terraformでサポートされていないケースも多いです
- 自前でやるのは運用コストがかかるため、terraformなどで使いやすくなるといいなと思っています
- Webの画面からが中心となるユースケースにおいては、変更履歴や誰が変更したか、などが分かるようになっていて欲しい
- ドキュメント管理のシステムでは当たり前に必要になる機能
- システムでサポートされる情報のリッチ化
- 特にシステムメタデータ。「このテーブルを一番叩いている / 最後に叩いた人は誰か」などはINFORMATION_SCHEMAから出して付与すればできるが、dataplex側でやって欲しい
- 現場が同じようなことをやっていて無駄が多い
- 特にシステムメタデータ。「このテーブルを一番叩いている / 最後に叩いた人は誰か」などはINFORMATION_SCHEMAから出して付与すればできるが、dataplex側でやって欲しい
参考