Google BigQuery でフェデレーション クエリを実行する
重要
この機能はパブリック プレビュー段階にあります。
この記事では、Azure Databricks で管理されていない BigQuery データに対してフェデレーション クエリを実行するように、Lakehouse フェデレーションを設定する方法について説明します。 Lakehouse フェデレーションの詳細については、「Lakehouse フェデレーションとは」を参照してください。
Lakehouse フェデレーションを使って BigQuery データベースに接続するには、Azure Databricks の Unity Catalog メタストアに次のものを作成する必要があります。
- BigQuery データベースへの "接続"。
- Unity Catalog で BigQuery データベースをミラーリングする "外部カタログ"。これにより、Unity Catalog のクエリ構文とデータ ガバナンス ツールを使って、Azure Databricks ユーザーのデータベースへのアクセスを管理できるようになります。
準備
ワークスペースの要件:
- Unity Catalog を使用できるワークスペース。
コンピューティングの要件:
- Databricks Runtime クラスターまたは SQL ウェアハウスから対象となる データベース システムに接続するためのネットワーク接続。 「レイクハウス フェデレーションのためのネットワークに関する推奨事項」を参照してください。
- Azure Databricks クラスターでは、Databricks Runtime 13.3 LTS 以降、および共有またはシングルユーザー アクセス モードを使用する必要があります。
- SQL ウェアハウスは、Pro またはサーバーレスである必要があります。
必要なアクセス許可:
- 接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされている Unity Catalog メタストアに対する
CREATE CONNECTION
特権を持つユーザーである必要があります。 - 外部カタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG
特権を持っている必要があります。
追加の権限要件は、以下の各タスク ベースのセクションで規定されています。
接続を作成する
接続では、外部データベース システムにアクセスするためのパスと資格情報を指定します。 接続を作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで CREATE CONNECTION
SQL コマンドを使用します。
必要な権限: メタストア管理者、または CREATE CONNECTION
特権を持つユーザー。
カタログ エクスプローラー
Azure Databricks ワークスペースで、カタログ をクリックします。
左側のペインで [外部データ] メニューを展開し、[接続] を選択します。
[接続の作成] をクリックします。
わかりやすい接続名を入力します。
BigQuery の [接続の種類] を選択します。
BigQuery インスタンスの以下の接続プロパティを入力します。
GoogleServiceAccountKeyJson: BigQuery プロジェクトを指定し、認証を提供するために使用される生の JSON オブジェクト。 この JSON オブジェクトを生成し、Google Cloud の [キー] の下にあるサービス アカウントの詳細ページからダウンロードできます。 サービス アカウントには、BigQuery ユーザーや BigQuery データ閲覧者など、BigQuery で適切なアクセス許可が付与されている必要があります。 以下に例を示します。
{ "type": "service_account", "project_id": "PROJECT_ID", "private_key_id": "KEY_ID", "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n", "client_email": "SERVICE_ACCOUNT_EMAIL", "client_id": "CLIENT_ID", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/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/SERVICE_ACCOUNT_EMAIL", "universe_domain": "googleapis.com" }
(省略可能) [接続のテスト] を選択して、ネットワークの接続性を確認します。 このアクションでは、認証はテストされません。
(省略可能) コメントを追加します。
Create をクリックしてください。
Sql
ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。 <GoogleServiceAccountKeyJson>
を、BigQuery プロジェクトを指定して認証を提供する生の JSON オブジェクトに置き換えます。 この JSON オブジェクトを生成し、Google Cloud の [キー] の下にあるサービス アカウントの詳細ページからダウンロードできます。 サービス アカウントには、BigQuery ユーザーや BigQuery データ閲覧者など、BigQuery で適切なアクセス許可が付与されている必要があります。 JSON オブジェクトの例については、このページの [カタログ エクスプローラー] タブを確認してください。
CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
GoogleServiceAccountKeyJson '<GoogleServiceAccountKeyJson>'
);
資格情報などの機密性の高い値には、プレーンテキストの文字列ではなく Azure Databricks のシークレットを使用することをお勧めします。 次に例を示します。
CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
GoogleServiceAccountKeyJson secret ('<secret-scope>','<secret-key-user>')
)
シークレットの設定については、「シークレットの管理」を参照してください。
外部カタログを作成する
外部カタログは、外部データ システム内のデータベースをミラーリングし、Azure Databricks と Unity Catalog を使ってそのデータベース内のデータに対するクエリの実行とアクセス管理ができるようにします。 外部カタログを作成するには、定義済みのデータ ソースへの接続を使用します。
外部カタログを作成するには、Catalog Explorer か、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで CREATE FOREIGN CATALOG
を使用します。
必要な権限:CREATE CATALOG
メタストアに対するアクセス許可と、接続の所有権または接続に対する CREATE FOREIGN CATALOG
特権。
カタログ エクスプローラー
- Azure Databricks ワークスペースで、カタログ をクリックします。
- [カタログの作成] ボタンをクリックします。
- [新しいカタログの作成] ダイアログで、カタログの名前を入力し、[外部] の[種類] を選択 します。
- Unity Catalog のカタログとしてミラーリングするデータベースへのアクセスを提供する接続を選択します。
- [Create (作成)] をクリックします。
Sql
ノートブックまたは Databricks SQL エディターで次の SQL コマンドを実行します。 角かっこ内の項目は省略可能です。 プレースホルダー値を置き換えます。
<catalog-name>
: Azure Databricks 内のカタログの名前。<connection-name>
: データ ソース、パス、アクセス資格情報を指定する接続オブジェクト。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;
サポートされているプッシュダウン
以下のプッシュダウンがサポートされています。
- フィルター
- プロジェクション
- 制限
- 関数: 部分的。フィルター式の場合のみ。 (文字列関数、数学関数、データ関数、時刻関数、タイムスタンプ関数、その他 Alias、Cast、SortOrder などの関数)
- 集計
- 制限付きで使用した場合の並べ替え
以下のプッシュダウンはサポートされていません。
- 結合
- Windows 関数
データ型マッピング
次の表に、BigQuery から Spark へのデータ型マッピングを示します。
BigQuery 型 | Spark の型 |
---|---|
bignumeric、numeric | DecimalType |
int64 | LongType |
float64 | DoubleType |
array、geography、interval、json、string、struct | VarcharType |
bytes | BinaryType |
[bool] | BooleanType |
date | DateType |
datetime、time、timestamp | TimestampType/TimestampNTZType |
BigQuery から読み取ると、preferTimestampNTZ = false
(既定値) の場合、BigQuery の Timestamp
は Spark の TimestampType
にマップされます。 BigQuery の Timestamp
は、preferTimestampNTZ = true
の場合、TimestampNTZType
にマップされます。