BigQueryのAnalytics Hubを触ってみる
はじめに
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のリスティングをサブスクライブし、参照してみる。
事前準備
ますはパブリッシャー側のプロジェクトで共有するデータセットと作成します。
今回は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を紹介しました。
データを共有するのに非常に有用なサービスだと思っています。是非、データ共有の際には利用を検討してみてください。