サイロ化されたBigQueryデータセット統合におけるDataplexと関連サービスの活用方法

## 概要

サイロ化された BigQuery データセットを Analytics Hub を活用して統合する際に、Dataplex および関連サービス（Cloud Data Loss Prevention API など）を利用して実施可能な作業を整理しました。本来は体系的にまとめたかったのですが、動作検証や IAM などの詳細な調査を行わないと有用性を判断しづらいため、ひとまず箇条書きで整理することにしました。

サイロ化された BigQuery データセットを Analytics Hub を活用して統合する方法については、下記の記事で整理しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a9868ae7-012d-d80a-a5ef-f06acaefdea7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f1b2cbc7-00a6-b6c6-839e-34a06539d8be.png)

引用元：[サイロ化したBigQueryをAnalyticsHubにより統合するアーキテクチャの検討時のメモ #GoogleCloud - Qiita](https://qiita.com/manabian/items/a5490ad17502511744b6)

Dataplexと関連サービスを活用して実施できる作業は以下のとおりです。詳細は次項で説明します。

1. BigQueryに追加されたデータセットおよびテーブルの検知
2. Cloud Data Loss Prevention APIによるデータプロファイリングを通じた機密データの特定
3. DataplexカタログによるBigQueryテーブルのメタデータ（テーブル定義やリネージ）の表示
4. Dataplexを介したデータ共有
5. HubプロジェクトのDataplexの公開
6. Catalog によるメタデータの管理
7. Attribute Store を用いたデータへの権限付与
8. Profile を用いたデータのプロファイリングの実施
9. Data Qualitty を用いたデータ品質チェックの実施

以下に、実施すべき運用業務と実施すべきでない作業を示します。Attribute Storeを用いたデータへの権限付与は有用である可能性が高いですが、現時点では技術的な検証ができていないため、その有用性を確認することをお勧めします。その他の作業については、必要に応じて実施の可否を判断してください。

**実施すべき作業**

| #    | 項目                                                         | 理由                                                         |
| ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| 1    | BigQuery に追加されたデータセットとテーブルの検知            | データセットをそのまま共有しないため、テーブルの増減に対応するため。 |
| 2    | Cloud Data Loss Prevention API  によるデータプロファイリングにて機密データの特定 | テーブルの機密レベルを検討する際の参考とするため。           |

**実施すべきでない作業**

| #    | 項目                            | 理由                                                         |
| ---- | ------------------------------- | ------------------------------------------------------------ |
| 4    | Dataplexを介したデータ共有      | Analytics Hub 経由で参照権限のみを付与で運用上は十分であるため。 |
| 5    | HubプロジェクトのDataplexの公開 | Hub プロジェクトにおけるオブジェクトへの権限付与の運用業務が煩雑となるため。 |
| 7    | Attribute Store を用いたデータへの権限付与 | ビューにて対してポリシータグを設定できないため。 |

## 前提事項

- Anlytics Hub によりデータ共有を行うアーキテクチャであること
- Publisher レイヤーと Hub レイヤー異なる運用チームであること
- 共有対象が BigQuery のオブジェクトのみであること
- Publisher レイヤーにてデータセットの運用ルールを変更しないこと

## Hub レイヤーにおける運用業務

### 1. BigQuery に追加されたデータセットとテーブルの検知

Dataplex にてオブジェクトにおける最終更新日からテーブルの追加を検知できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/facd0de2-bfc4-b8c9-df69-e64b5550bed7.png)

上記のデータを Dataplex から抽出する方法を確認できていませんが、下記の方法で取得できる可能性があります。

- [Python client library  | Google Cloud](https://cloud.google.com/python/docs/reference/datacatalog/latest)
- [Google Cloud Data Catalog API  | Data Catalog Documentation](https://cloud.google.com/data-catalog/docs/reference/rest)

BigQuery にて下記のクエリで抽出した結果を利用したほうが簡単である可能性もあります。`last_modified_time`列に Unix Time Stamp 形式で最終更新日時が保持されているようです。

```sql
SELECT 
  *
FROM 
  bq-hub-01.bq_publisher_01_sample_ds_01_in.__TABLES__
;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/206aba52-dc03-b802-13ff-422edef6f51e.png)

### 2. Cloud Data Loss Prevention API によるデータプロファイリングにて機密データの特定

Cloud Data Loss Prevention API （Sensitive Data Discovery の一部）にて、テーブルレベルとカラムレベルでデータの機密性レベル（下記図の`MODERATE`など）を特定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/056c2e02-6d97-9ffc-d059-315ea3444c59.png)

スキャンのスコープとしては、下記の２つを選べるようです。

- [単一プロジェクトの BigQuery データのプロファイリング  | 機密データの保護のドキュメント  | Google Cloud](https://cloud.google.com/sensitive-data-protection/docs/profile-project?hl=ja)
- [組織またはフォルダの BigQuery データのプロファイリング  | Sensitive Data Protection Documentation  | Google Cloud](https://cloud.google.com/sensitive-data-protection/docs/profile-org-folder?hl=ja)

Hub のプロジェクトスコープで、データセットごとにスキャンを実施することがよさそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1eab37f7-d832-1c0e-ff66-1718a5a12182.png)

引用元：[単一プロジェクトの BigQuery データのプロファイリング  | 機密データの保護のドキュメント  | Google Cloud](https://cloud.google.com/sensitive-data-protection/docs/profile-project?hl=ja)

高額な費用とならないように見積機能を用いて、コストを管理してください。

- [単一プロジェクトのデータ プロファイリング費用を見積もる  | 機密データの保護のドキュメント  | Google Cloud](https://cloud.google.com/sensitive-data-protection/docs/estimate-project?hl=ja)
- [組織またはフォルダのデータ プロファイリング費用を見積もる  | 機密データの保護のドキュメント  | Google Cloud](https://cloud.google.com/sensitive-data-protection/docs/estimate-org-folder?hl=ja)

保護すべき項目を特定するために、検査テンプレートのカスタマイズを検討してください。

- [テンプレート  | 機密データの保護のドキュメント  | Google Cloud](https://cloud.google.com/sensitive-data-protection/docs/concepts-templates?hl=ja)
- [機密データの保護の検査テンプレートの作成  | Sensitive Data Protection Documentation  | Google Cloud](https://cloud.google.com/sensitive-data-protection/docs/creating-templates-inspect?hl=ja)

プロファイリング結果を BigQUery にエクスポートし、テーブルでデータを保持することも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7b29d278-fb1e-dadb-4b10-895c72ac0881.png)

引用元：https://qiita.com/manabian/items/dd676f6712a8f23555f9

### 3. Dataplex カタログにて BigQuey のテーブルにおけるメタデータ（テーブル定義やリネージ）の表示

テーブルからビューを作成した場合などにも下記のようにデータリネージを表示することでができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0607ffe2-187b-855c-7008-3271ba947634.png)

データリネージはプロジェクトごとに  Data Lineage API を有効にする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/54143233-fb28-bc81-00ae-20fd10b314f7.png)

引用元：[データリネージの留意点  | Data Catalog Documentation  | Google Cloud](https://cloud.google.com/data-catalog/docs/concepts/lineage-considerations?hl=ja)

リネージに関するデータについては SQL で取得する方法を確認できず、 Python、 あるいは、 REST API 経由で取得できるようです。

- [Python client library  | Google Cloud](https://cloud.google.com/python/docs/reference/datacatalog/latest)
- [Data Lineage API  | Data Catalog Documentation  | Google Cloud](https://cloud.google.com/data-catalog/docs/reference/data-lineage/rest)

### 4. Dataplex 経由でのデータ提供

Dataplex において、１つ以上の BigQuery データセットを Zone としてまとめることで、データの提供が可能です。Analytics Hub によるデータ共有と比較すると、権限付与方法などの検討事項が多く、シンプルな運用を実施できない可能性があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/790622bd-6c11-e0e3-e081-2ab71d013ab2.png)

引用元：[Dataplex の概要  | Google Cloud](https://cloud.google.com/dataplex/docs/introduction?hl=ja)

別のプロジェクトを Dataplexe にてデータ共有を実施する場合には、 Dataplex サービス アカウントに対して権限範囲が広い BigQuery 管理者ロールを付与する必要があり、 Publisher レイヤーからの賛同を得られない可能性もあります。 BigQuery 管理者ロールを付与する必要性にについては下記のように記述されています。

> 別のプロジェクトの BigQuery データセットをレイクに接続するには、データセットに対する　BigQuery 管理者ロールを　Dataplex サービス アカウントに付与する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8cc74e38-8a5b-93a0-fd2f-0000956af17a.png)

引用元：[レイク内のデータアセットを管理する  | Dataplex  | Google Cloud](https://cloud.google.com/dataplex/docs/manage-assets?hl=ja#role-for-dataset)

ただし、次のようなユースケースが発生した場合には、利用することを検討してください。

- データの書き込み権限を付与したい場合
- Cloud ストレージ上のファイルも共有したい場合

### 5. Hub プロジェクトの Dataplex の公開

Hub プロジェクトの Dataplex に Publisher や Subscriber を招待することは可能です。しかし、 Hub プロジェクトでは機微なデータを扱うため、権限付与は慎重に行うべきです。

### 6. Catalog によるメタデータの管理

Dataplex にて Catalog を選択する際に利用できるメタデータを整理する機能があります。ただし、本機能に関する情報が少なく、現時点で有用性を判断できていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0066c85a-ed1d-1e10-01e7-226f29f062b7.png)

### 7. Attribute Store を用いたデータへの権限付与

Dataplxe にて Attribute Store に基づき特定のデータの扱い方を定義できる機能があります。ビューに対して Attribute を設定する方法を確認できていないため、現時点では利用を推奨しません。 

BigQuery オブジェクトのカラムに対して属性を設定すると、 BigQuery列ポリシータグとして追加される仕様です。

> Dataplex は、列仕様ポリシーを BigQuery ポリシータグとして伝播します。BigQuery には、ポリシータグが 1 列に 1 つという制限があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bbc15883-0670-e180-0405-e474a90781e7.png)

引用元：[Dataplex 属性ストアの使用  | Google Cloud](https://cloud.google.com/dataplex/docs/attribute-store?hl=ja#column_specifications)

### 8. Profile を用いたデータのプロファイリングの実施

Dataplxe にてデータのプロファイリングを実施できる機能があります。Cloud Data Loss Prevention API （Sensitive Data Discovery の一部）のプロファイリングとは異なる機能です。 Hub レイヤーで実施する有用性を認識できていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f519b9d0-3abe-c473-03fe-05549c73b14f.png)

引用元：[Dataplex にて他プロジェクトの BigQuery のテーブルに対して Data Profile を実施する方法 #dataplex - Qiita](https://qiita.com/manabian/items/31cc87932c62d7588fde)

### 9. Data Qualitty を用いたデータ品質チェックの実施

Dataplxe にて指定した条件に基づいて BigQuery のテーブルなどをデータ品質チェックする機能があります。ただし、データ品質を行う上で私が最も必要と考えている、複数列における主キー制約、及び、外部キー制約を確認する方法を確認できず、ユースケースを特定できていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3c983369-fbe8-9684-37b2-d098ebed7e01.png)

引用元：[自動データ品質の概要  | Dataplex  | Google Cloud](https://cloud.google.com/dataplex/docs/auto-data-quality-overview?hl=ja)

DMBOKの記述にもあるように、データ品質の要件は利用者（今回のアーキテクチャではPublisher）が決定するため、Hubレイヤーで汎用的なデータ品質要件を策定するのは難しいと考えています。

> データ品質の度合いはデータ利用者の期待と要求を満たす度合いである。

引用元：データマネジメント知識体系ガイド 第二版 第13章 データ品質 1.3 本質的な概念

## 更新履歴

#### 2024年9月20日　Attribute Store を利用しない方針に変更

Attribute をカラムに設定するとポリシータグが設定されるが、ビューではポリシータグを利用できないことが判明したため、Attribute Store を利用しない方針に変更。ビューの画面にてポリシータグを設定できないことを確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/620c7d20-57d7-07cd-18a7-8b5080acfd0f.png)

テーブルでは`ADD POLICY TAG`を設定可能であることを確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1041f7bc-00a5-82cb-8bf8-2c8e3ae6222d.png)