こんにちは。SCSKの磯野です。
Dataplexにはデータリネージ機能があります。BigQueryでどのように加工したときがリネージ対象なのか、調べてみました。
データリネージとは?
データリネージとは、データがいつ、どこで、どのように取得され、今の状態にあるのかを追跡し、データの流れを可視化する機能です。データリネージは、Dataplex の機能名ではありますが、Google Cloud に限らず一般的に使われる用語です。
BigQueryでどのように加工したときにリネージされる?
公式ドキュメントには、以下の記載があります。
BigQuery プロジェクトでデータリネージを有効にすると、Dataplex によって次のリネージ情報が自動的に記録されます。
検証対象
実際にどのように加工するとリネージされるのか、以下の4パターンを調べてみました。
- Python(BigQuery API、pandas)
※実行基盤はCloudRunまたはVertex AI Workbench - Python(BigQuery DataFrame)
※実行基盤はCloudRunまたはVertex AI Workbench - magicコマンド
※実行基盤はVertex AI Workbench - Dataform
Python(BigQuery API、pandas)
CloudRun・Vertex AI Workbenchの両方で試しましたが、リネージされませんでした。
from google.cloud import bigquery import pandas as pd import google.cloud.logging log_client = google.cloud.logging.Client() log_client.setup_logging() client = bigquery.Client() def main(): query = """ SELECT PassengerId, Survived, Name FROM xxx_dataset.transfer_titanic """ df = client.query(query).to_dataframe() client.load_table_from_dataframe(df,"xxx_dataset.dataplex_test_table_by_vertexai_pandas") if __name__ == '__main__': main()
Python(BigQuery DataFrame)
CloudRun・Vertex AI Workbench、どちらの環境でもリネージされました。
※BigQuery DataFrameは2024年9月時点でプレビュー版であるため注意
import bigframes.pandas as bpd import google.cloud.logging log_client = google.cloud.logging.Client() log_client.setup_logging() def main(): query = """ SELECT PassengerId, Survived, Name FROM xxx_dataset.transfer_titanic_test_copy2 """ df = bpd.read_gbq(query) df.to_gbq("xxx_dataset.dataplex_test_table_by_vertexai_bpd", if_exists='replace') if __name__ == '__main__': main()
magicコマンド
Vertex AI Workbenchで実行したところ、リネージされました。
%%bigquery CREATE TABLE `dxr-poc.xxx_dataset.dataplex_test_magic` CLONE `dxr-poc.xxx_dataset.transfer_titanic_test_copy3`;
Dataform
下記に従って検証したところ、リネージされました。
SQL ワークフローを作成して実行する | Dataform | Google Cloud
さまざまなユースケース
スクレイピング等でGCP環境外のデータをBigQueryに格納する場合
リネージ対象はGCP環境内のみ。一度GCSを経由すれば、GCSーBigQuery間のみリネージされます。
プロジェクトをまたぐ場合
両方のプロジェクトにて以下のAPIが有効にされていればリネージ可能です。
- Google Cloud Data Catalog API
- Data Lineage API
結論
- GCP外のデータをリネージすることはできないものの、データ取得時に一度GCSへ格納しつつ、BigQuery DataFrameを使うことでデータリネージが可能でした。
- pandas APIはリネージの対象外でした。
BigQuery DataFrameを使うことでリネージは可能ですが、実行基盤を特定することはできませんでした。また、実行の度にリネージが作成されるため、視認性は低いです。 - Dataformやmagicコマンドはリネージの対象でした。
- すべてのリネージ情報は 30 日間のみシステムに保持されます。
→定期実行しているものであれば問題ないですが、スポット実行のテーブルのリネージは消えてしまうため注意が必要です。
補足
- カスタムリネージについて
Dataplexがメタデータの自動収集の対象外としている処理については、リネージも自動作成できませんが、カスタムリネージを作成することで、表示することは可能です。
データリネージについて | Data Catalog のドキュメント | Google Cloud - リネージが作成されるまで、少しタイムラグがあります。今回の検証では、ジョブが終わってから約10分ほどで生成されました。
※公式ドキュメントには下記の記載があります。
BigQuery リネージは、BigQuery ジョブが完了してから 24 時間以内に表示されます。
- リネージ情報は、関連するデータソースを削除した後も保持されます。つまり、BigQuery テーブルとその Data Catalog エントリを削除しても、API を使用して最大 30 日間は、そのテーブルのリネージを読み取ることができます。