Analytics Hub / BigQuery データシェアリング 2024

BigQuery のデータシェアリングに関する機能も徐々に強化され、2024 年現在では、BigQuery データセットのほとんどに加え Pub/Sub トピックまで、Analytics Hub を通して他の組織へ共有できるようになりました。

Analytics Hub には、2 種類の利用者がいます。
* サブスクライバーとして、共有されたデータを自組織の BigQuery に接続する
* パブリッシャーとして、自組織のデータを他の組織に共有する

どちらの目線でも、より良いデータシェアリングのために使える機能について確認していきましょう。

Google Cloud Champion Innovators Advent Calendar 2024
 9 日目および BigQuery Advent Calendar 2024 10 日目の記事です。

https://adventar.org/calendars/10061

https://qiita.com/advent-calendar/2024/bigquery

# 誰？
私は Analytics Hub を使って、いくつかのオープンデータを BigQuery で使いやすいように提供しています。76 組織超、124 名の方にサブスクライブしていただいています。
* [加工済みオープンデータ](https://bqfun.jp/docs/jpdata)
* [Prepper Open Data Bank - 株式会社truestar (on BigQuery by BQ FUN)](https://bqfun.jp/docs/podb)

# Analytics Hub とは何か
Analytics Hub は、BigQuery データセットと Pub/Sub トピックを、組織間で共有できるサービスです。2024 年から Analytics Hub の一般公開にフォームの申請がいらなくなり、公開されるデータも増えてきています。

# 一般公開されているデータを使いたい
Google Cloud の利用者であれば、[BigQuery > Analytics Hub > SEARCH LISTINGS](https://console.cloud.google.com/bigquery/analytics-hub/exchanges;cameo=analyticshub;pageName=search;pageResource=?) から検索ができます。

リスティングを選び、SUBSCRIBE ボタンが有効状態で表示されていれば、すぐに利用可能です。無効状態で表示されており、REQUEST ACCESS ボタンが表示されている場合は、公開している組織に連絡を取って、サブスクライブの権限をもらう必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135291/6e2fe616-9f9a-4c2d-1d43-252837ff7bc4.png)

全ての一般公開リスティングから探すのが大変な場合は、[@toshiyasuimai](https://x.com/toshiyasuimai) さんが作成してくださっている、[GCP Analytics Hub resource(日本の一般公開データセット)](https://docs.google.com/spreadsheets/d/1-EGVJ9M4kJxG621l6mfhncL5nVxSZN495pHGe6cp2ZY/edit?usp=sharing) が参考になるかもしれません。

# データを共有したい
2024 年現在、Analytics Hub はアップデートを重ね、BigQuery データセットに入るほぼ全てのオブジェクト、および Pub/Sub トピックの共有をサポートしています。
オブジェクトの共有自体では機能の不足はないように感じます。

## 共有可能オブジェクト
<table>
<caption>Analytics Hub の共有可能オブジェクト
<thead>
<tr><th>大項目<th>小項目<th>サポート
<tbody>
<tr><td rowspan=7>テーブル<td>標準のテーブル<td>⭕
<tr><td>BigLake 外部テーブル<td>⭕
<tr><td>BigQuery Omni<td>⭕
<tr><td>オブジェクト テーブル<td>⭕
<tr><td>外部テーブル<td>⭕
<tr><td>テーブル クローン<td>
<tr><td>テーブル スナップショット<td>⭕
<tr><td rowspan=3>ビュー<td>標準のビュー<td>⭕
<tr><td>マテリアライズド ビュー<td>⭕
<tr><td>マテリアライズド ビューのレプリカ<td>
<tr><td rowspan=5>ルーティン<td>ユーザー定義関数<td>⭕
<tr><td>リモート関数<td>⭕
<tr><td>テーブル関数<td>⭕
<tr><td>SQL ストアド プロシージャ<td>❌
<tr><td>Apache Spark ストアド プロシージャ<td>❌
<tr><td>BigQuery ML モデル<td><td>⭕
<tr><td rowspan=3>Pub/Sub トピック<td>標準のトピック<td>⭕ プレビュー
<tr><td>Amazon Kinesis Data Streams インポート トピック<td>
<tr><td>Cloud Storage インポート トピック<td>
<tr><td rowspan=3>承認によるアクセスの制御<td>承認済みビュー<td>⭕
<tr><td>承認済みルーティン<td>⭕
<tr><td>承認済みデータセット<td>⭕
</table>

（この記事を読む BigQuery 利用者なら非正規化テーブルも問題ないはず）

## 共有時に付与できる制約

これらに加え、共有するデータの集計を制限する機能も以下のように充実しています。
* クエリ結果を含めたテーブルデータのコピーを制限
* 差分プライバシーなどの分析ルールを適用
* データ マスキングの適用（BigQuery エディション Standard を除く）
* VPC Service Controls 境界を利用した制限

パブリッシャーとしてデータ共有を設定する場合、サブスクライバーが利用している BigQuery エディションまたはオンデマンド モデルによっては、機能がブロックされ、クエリできないものがある点には注意が必要です。例えば「行レベルのセキュリティ」を設定されたテーブルには、BigQuery エディション Standard を利用しているサブスクライバーはクエリジョブを正しく実行できません。

## 管理用の機能
### 使用状況の指標

Analytics Hub でデータシェアリングを始めると、どの組織から何件クエリが発行されているか確認することができます（具体的な組織や回数は適当に埋めてあります）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135291/d95a469b-9113-1b1b-dc9f-e850e2f6da6e.png)

SUBSCRIPTIONS タブを見ると、どの組織の誰が、サブスクライブをしているか確認と、削除が行えます。サブスクリプションを削除すると、接続されたデータセットの中身がクエリできなくなり、サブスクライバーおよびその組織からクエリされなくなります。
API を使ったサブスクリプションの取消しもできるため、契約期間の終了等で、サブスクリプションの削除の自動化も可能です。

## INFORMATION_SCHEMA.SHARED_DATASET_USAGE

使用状況の指標では、集約されすぎていると感じる場合は、[INFORMATION_SCHEMA.SHARED_DATASET_USAGE ビュー](https://cloud.google.com/bigquery/docs/information-schema-shared-dataset-usage)を利用できます。このビューには、共有データセット テーブルの使用状況に関するメタデータが含まれています。
どの組織の誰が、どのプロジェクトどのリージョンで、ジョブを実行したかが分かります。クエリ本文は見れません。

## 機能の不足
他のデータシェアリングと比べて、以下のような機能が不足している点は注意すべきです。

* クロスリージョンのデータ共有
    * BigQuery でリージョンを合わせる処理を別途実装する必要がある
* 有料リスティング / データ交換
    * BigQuery の外側で課金の管理を実装する必要がある
* データ交換リクエストの管理
    * BigQuery の外側でデータ交換リクエストを処理して、権限付与を行う必要がある

ただし、データシェアリングの最も大きな利点は、利用者のすぐそばにデータを届けることにあります。BigQuery を利用していない人にデータを共有するために他のデータシェアリングが使えるわけでもないため、割り切って利用する必要があります。

# まとめ

サブスクライバーとしては、Analytics Hub 上の一般公開リスティングが増え、用途に合うデータを探しやすくなった 1 年でした。
パブリッシャーとしても、ほとんどの BigQuery オブジェクトの共有がサポートされ、管理機能も少しずつ充実してきて、多くの組織におすすめできる機能群になってきたと思います。

ぜひ、みんなで使って改善要望を伝えていきましょう。

# Appendix. 2024 年のリリースノート
* 7 月
    * [Pub/Sub を使用したストリーム共有](https://cloud.google.com/bigquery/docs/analytics-hub-stream-sharing) Preview
    * [データ交換を一般公開する](https://cloud.google.com/bigquery/docs/analytics-hub-manage-exchanges#make-data-exchange-public) GA
    * [公開リスティングの未認証 URL を作成する](https://cloud.google.com/bigquery/docs/analytics-hub-manage-listings#create_a_non-authenticated_url_for_public_listing) GA
* 6 月
    * [下り（外向き）データ オプション](https://cloud.google.com/bigquery/docs/analytics-hub-introduction#data_egress) GA
* 5 月
    * [リスティングを監視する](https://cloud.google.com/bigquery/docs/analytics-hub-manage-subscriptions) GA
    * [サブスクリプションを管理する](https://cloud.google.com/bigquery/docs/analytics-hub-manage-subscriptions) GA
* 1 月
    * 顧客管理の暗号鍵で保護されたデータのサポート GA