Databricks から BigQuery に接続する

記事タイトルとURLをコピーする

データドリブンな人間を目指している香取です。

今回は Databricks on AWS から BigQuery のデータに接続する方法について解説します。

はじめに

Databricks では レイクハウスフェデレーション 機能を使って、BigQuery のデータに直接クエリを実行できます。

この機能を使うことで、Databricks にデータをコピーすることなく、BigQuery 上のデータを活用した分析や機械学習が可能になります。

今回は以下のドキュメントに沿って実際に Databricks から BigQuery に接続してテーブルを連携してみます。

docs.databricks.com

簡易構成図

BigQuery で作成したサービスアカウントをもとに Databricks からの接続を作成し、Unity Catalog の外部カタログとして BigQuery のテーブルを参照することができます。

これにより、Databricks にデータをコピーすることなく、BigQuery 上のテーブルデータに対してクエリを実行できます。

前提

  • Databricks on AWS (Free Edition) にて実施
  • 各手順は UI 画面から実施することも可能ですが、本記事では SQL コマンドで作成していきます
    • Databricks ノートブックや Databricks SQL エディタ、Databricks CLI などで各コマンドを実行してください
    • UI で操作したい方はドキュメントにも記載がありますのでそちらをご参照ください

また、以下の要件を満たす必要があるとドキュメントに記載されていますので、事前に確認しておきましょう。

  • ワークスペースの要件
    • Unity Catalog のワークスペースが有効になっていること
  • コンピュートの要件
    • Databricks Runtime クラスターまたは SQL ウェアハウスからターゲットデータベースシステムへのネットワーク接続が確立されていること
    • Databricks クラスターでは、Databricks Runtime 16.1 以降と標準または専用アクセスモード (以前の共有および単一ユーザー) を使用すること
    • SQL ウェアハウスは Pro または Serverless であること
  • 必要な権限
    • 接続を作成するには、メタストア管理者か、ワークスペースに接続されている Unity Catalog メタストアの CREATE CONNECTION 権限を持つユーザーであること
    • フォーリンカタログを作成するには、メタストアに対する CREATE CATALOG 権限を持ち、接続の所有者であるか、接続に対する CREATE FOREIGN CATALOG 権限を持っているユーザーであること

1. Google Cloud Platform でサービスアカウントキーを作成する

まずは Google Cloud Platform でサービスアカウントキーを作成します。

「IAM と管理 > サービスアカウント > + サービスアカウントを作成」からサービスアカウントを作成します。

今回は「BigQuery 管理者」のロールを付与しました。用途に合わせて IAM の条件を追加してセキュリティを担保するようにしてください。(「BigQuery ユーザー」でも試しましたが、それだと Databricks からクエリができませんでした)

作成したサービスアカウントの「鍵」タブから「キーを追加 > 新しい鍵を作成 > JSON」を選択します。

ダウンロードした JSON ファイルは以降の手順で使用するので保管しておきましょう。

2. 接続を作成する

Databricks から BigQuery にアクセスするためのパスと認証情報を指定して接続を作成します。

CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
  GoogleServiceAccountKeyJson '<GoogleServiceAccountKeyJson>'
);

<GoogleServiceAccountKeyJson> には BigQuery プロジェクトのサービスアカウントキーの JSON コンテンツを指定します。

※ private_key に改行コード (\n) が含まれると SQL コマンドがエラーになるため、\\n で置き換えてエスケープしておいてください。

CREATE CONNECTION my_bigquery_connection TYPE bigquery
OPTIONS (
  GoogleServiceAccountKeyJson '{
    "type": "service_account",
    "project_id": "xxxxxxxxxx",
    "private_key_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "private_key": "-----BEGIN PRIVATE KEY-----\\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\\n-----END PRIVATE KEY-----\\n",
    "client_email": "xxx@xxx.iam.gserviceaccount.com",
    "client_id": "xxxxxxxxxxxxxxxxxxxxx",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/xxx.iam.gserviceaccount.com",
    "universe_domain": "googleapis.com"
    }'
);

作成した接続はカタログ画面の「設定 > 接続」から確認できます。

3. 外部カタログを作成する

<catalog-name> には任意のカタログ名を、 <connection-name> には先ほど作成した接続名を指定します。

CREATE FOREIGN CATALOG IF NOT EXISTS <catalog-name> USING CONNECTION <connection-name>;

カタログ画面から確認すると、作成した外部カタログが表示されていることが確認できます。

テーブルの詳細を確認すると、列情報やサンプルデータも確認できました。

おわりに

今回は Databricks から Google BigQuery に接続してテーブルを連携する方法について解説しました。

この記事が皆様の参考になれば幸いです。

参考リンク

香取 拓哉 (記事一覧)

2023年度新卒入社
データドリブンな人間を目指しています
好きな食べ物は芽ねぎ