BigQueryのAnalytics Hubを触ってみる

2024.02.15

はじめに

Google Cloudデータエンジニアのはんざわです。
先日、Analytics Hubでデータセットを他のプロジェクトに共有したい事例があり、その際に調べたことなどを本記事にまとめたいと思います。

Analytics Hubとは

Analytics Hubとは、Google Cloudネイティブのデータシェアリングサービスです。
このサービスを利用することで組織内でのデータ共有を安全かつ迅速に行うことが可能になります。

パブリッシャー と サブスクライバー

Analytics Hubには パブリッシャーサブスクライバー という概念が存在します。
それぞれを一言で表すなら、 パブリッシャーはデータ提供者サブスクライバーはデータ受取者 となり、お互いが以下のような構成をしています。


図1: パブリッシャーのワークフロー


図2: サブスクライバーのワークフロー

ここでいくつか新しい概念が登場したので簡単に紹介します。

  • Shared dataset(共有データセット)
    • 共有したいデータセット。
  • Listing(リスティング)
    • 共有データセットと1対1で繋がる。
    • パブリッシャーは、リスティングにドキュメントなどの追加情報を付与することでサブスクライバーの利便性が向上する。
  • Data exchange(データエクスチェンジ)
    • リスティングをまとめて管理する箱のようなもの。
    • データエクスチェンジには、限定公開と一般公開があり、デフォルトでは限定公開になっている。
    • 公開設定がデータエクスチェンジに含まれるリスティングにも反映される。
  • Linked dataset(リンク済みデータセット)
    • サブスクライバーがリスティングをサブスクライブするとリンク済みデータセットがプロジェクトに作成される。
    • リンク済みデータセットは、読み取り専用でデータの追加や更新は行えない。

実際に触ってみる

大まかな流れは次のようになります。

  1. パブリッシャーのプロジェクトで共有するデータセットを作成する。
  2. パブリッシャーでデータエクスチェンジを作成し、1で作成したデータセットをリスティングに登録する。
  3. サブスクライバーのプロジェクトで2のリスティングをサブスクライブし、参照してみる。

事前準備

ますはパブリッシャー側のプロジェクトで共有するデータセットと作成します。
今回はsample_datasetを1から3まで作成しました。

また、下記クエリでそれぞれのデータセット内に一般公開データセットのテーブルを作成します。

CREATE TABLE sample_dataset1.github_nested AS (
  SELECT
    *
  FROM
    samples_dataset.github_nested
);

CREATE TABLE sample_dataset2.wikipedia AS (
  SELECT
    *
  FROM
    samples_dataset.wikipedia
);

CREATE TABLE sample_dataset3.gsod AS (
  SELECT
    *
  FROM
    samples_dataset.gsod
);

パブリッシャーの準備

BigQueryのタブからAnalytics Hubを選択し、エクスチェンジの作成を選択します。
今回は東京リージョンにdata-exchange-testという名前で作成しました。

次にデータエクスチェンジに事前準備で作成したデータセットをリスティングとして登録します。
先ほど作成したデータエクスチェンジを選択し、リスティングを作成を選択します。

下記画像のように共有データセットの欄で事前準備で作成したデータセットを検索し、選択します。
今回の記事では触れませんが、データ下り(外向き)の制御のオプションを設定することでサブスクライバー側からのデータのコピーやエクスポートを制御することも可能です。

次にリスティングの詳細を設定します。ここでは表示名や詳細、ドキュメントなどを設定することができます。
表示名は元々のデータセット名と同じ名前を設定します。

表示名を設定したら残りの設定は飛ばし、公開を選択します。
残りの2つのデータセットも同様にリスティングに設定し、最終的に下の画像のようになりました。

これでパブリッシャー側の準備は終了です。
次にサブスクライバー側で登録したリスティングをサブスクライブします。

サブスクライバー側の操作

同じ組織に所属するプロジェクトを準備しました
まだ、データセットが1つもない状態です。ここから先ほど登録したリスティングをサブスクライブし、参照してみます。

左上のエクスプローラの右側にある+ 追加を選択し、Analytics Hubを選択します。

フィルタから自分の組織内のチェックボックスにチェックを入れると事前に登録したリスティングが表示されます。

まず初めにsample_dataset1を追加します。
+ データセットをプロジェクトに追加を選択し、内容に問題がないようであれば保存を選択します。

保存するとデータセットの一覧にリンク済みデータセットが作成されます。

あとは通常のデータセット同様にテーブルの参照を行うことができます。

/* 正常に結果が返ってくる */
SELECT
  *
FROM
  sample_dataset1.github_nested
LIMIT 100

試しにINSERTしようとするとエラーを返します。

/* エラーを吐く */
/* <PROJECT_ID>:sample_dataset1 is a linked dataset. Linked datasets are read-only */
INSERT sample_dataset1.github_nested
WITH tmp AS (
  SELECT
    *
  FROM
    sample_dataset1.github_nested
  LIMIT 100
)

SELECT
  *
FROM
  TMP

料金

データエクスチェンジやリスティングを利用する際に追加料金は発生しません。
パブリッシャーとサブスクライバーに発生する料金は以下の通りです。

  • パブリッシャー
    • テーブルのストレージ料金
  • サブスクライバー
    • クエリのスキャン料金
    • リンク済みデータセットには、ストレージ料金は発生しません

公式ドキュメント: 料金

サポートされているリージョン

日本だと東京と大阪の両方のリージョンでサポートされています。
リージョンの詳細は下記公式ドキュメントを確認してください。

公式ドキュメント: サポートされるリージョン

最後に

今回はBigQueryのAnalytics Hubを紹介しました。
データを共有するのに非常に有用なサービスだと思っています。是非、データ共有の際には利用を検討してみてください。