Google BigQuery でフェデレーション クエリを実行する
この記事では、 によって管理されていない データに対してフェデレーション クエリを実行するためにレイクハウスフェデレーションを設定する方法について説明します。BigQueryDatabricksレイクハウスフェデレーションの詳細については、 「レイクハウスフェデレーションとは何ですか?」を参照してください。 。
レイクハウスフェデレーションを使用して BigQuery データベースに接続するには、Databricks Unity Catalog メタストアに以下を作成する必要があります。
BigQuery データベース への接続 。
Unity Catalog のクエリー構文ツールとデータガバナンス ツールを使用してデータベースへの Databricks ユーザー アクセスを管理できるように、Unity Catalog で BigQuery データベースをミラーリングする フォーリンカタログ 。
始める前に
ワークスペースの要件:
Unity Catalog に対して有効なワークスペース。
コンピュートの要件:
Databricks Runtime クラスターまたは SQLウェアハウスからターゲット データベース システムへのネットワーク接続。 「レイクハウスフェデレーションのネットワークに関する推奨事項」を参照してください。
Databricks クラスタリングでは、 Databricks Runtime 16.1 以降と、共有またはシングル ユーザー アクセス モードを使用する必要があります。
SQLウェアハウスは Pro または サーバレス である必要があります。
必要な権限:
接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされている Unity Catalog メタストアに対する
CREATE CONNECTION
特権を持つユーザーである必要があります。フォーリンカタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG
権限を持っている必要があります。
追加のアクセス許可要件は、以下の各タスクベースのセクションで指定されています。
接続を作成する
接続は、外部データベース・システムにアクセスするためのパスと資格情報を指定します。 接続を作成するには、カタログエクスプローラを使用するか、Databricks ノートブックの CREATE CONNECTION
SQL コマンド、または Databricks SQL クエリーエディタを使用します。
注:
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections を参照してください。 および Unity Catalog コマンド。
必要な権限: メタストア管理者または CREATE CONNECTION
権限を持つユーザー。
Databricks ワークスペースで、 [カタログ] をクリックします 。
[ カタログ ] ウィンドウの上部にある [ 追加 ] アイコンをクリックし、メニューから [ 接続の追加 ] を選択します。
または、クイック アクセスページで[外部データ >]ボタンをクリックし、 [接続]タブに移動して[接続の作成] をクリックします。
接続のセットアップ ウィザードの 接続の基本 ページで、わかりやすい接続名を入力します。
[ 接続の種類 ] で [Google BigQuery] を選択し、[ 次へ] をクリックします。
[ 認証] ページで、 インスタンスの Google サービス アカウント キーJSON BigQueryを入力します。
これは、BigQuery プロジェクトを指定し、認証を提供するために使用される未加工の JSON オブジェクトです。 この JSON オブジェクトを生成して、Google Cloud のサービス アカウント詳細ページの [KEYS] からダウンロードできます。 サービス アカウントには、BigQuery ユーザーや BigQuery データビューアなどの BigQuery で適切な権限が付与されている必要があります。 次に例を示します。
{ "type": "service_account", "project_id": "PROJECT_ID", "private_key_id": "KEY_ID", "private_key": "PRIVATE_KEY", "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" }
(オプション)BigQuery インスタンスの [プロジェクト ID ] を入力します。
これは、この接続で実行されるすべてのクエリの請求に使用される BigQuery プロジェクトの名前です。 デフォルトをサービス アカウントのプロジェクト ID に設定します。
(オプション)コメントを追加します。
[ 接続の作成] をクリックします。
[カタログの基本] ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。
(オプション)[接続をテスト]をクリックして、動作することを確認します。
[ カタログを作成] をクリックします。
[ アクセス ] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 [ すべてのワークスペースにアクセス権がある] を選択するか、[ ワークスペースに割り当て] をクリックし、ワークスペースを選択して [ 割り当て] をクリックします。
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。 テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
カタログに対する 権限を付与 します。 [ 許可] をクリックします。
カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。 テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
各プリンシパルに付与する 権限プリセット を選択します。 デフォルトでは、すべてのアカウントユーザーに
BROWSE
が付与されます。ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
read
権限を付与します。ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する
read
権限とmodify
権限を付与します。付与する権限を手動で選択します。
付与 をクリックします。
「次へ」をクリックします。
[メタデータ] ページで、タグのキーと値のペアを指定します。詳細については、「 セキュリティ保護可能なオブジェクト Unity Catalog タグを適用する」を参照してください。
(オプション)コメントを追加します。
保存をクリックします。
ノートブックまたは Databricks SQL クエリーエディターで次のコマンドを実行します。 <GoogleServiceAccountKeyJson>
を、BigQuery プロジェクトを指定し、認証を提供する未加工の JSON オブジェクトに置き換えます。このJSONオブジェクトを生成し、Googleクラウドのサービスアカウント詳細ページの「KEYS」からダウンロードできます。 サービス アカウントには、BigQuery ユーザーや BigQuery データビューアなど、BigQuery で適切な権限が付与されている必要があります。 JSON オブジェクトの例については、このページの「 カタログエクスプローラ」(Catalog Explorer ) タブを参照してください。
CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
GoogleServiceAccountKeyJson '<GoogleServiceAccountKeyJson>'
);
資格情報などの機密性の高い値には、プレーンテキスト文字列ではなく Databricks シークレット を使用することをお勧めします。 例えば:
CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
GoogleServiceAccountKeyJson secret ('<secret-scope>','<secret-key-user>')
)
シークレットの設定については、「 シークレット管理」を参照してください。
フォーリンカタログの作成
注:
UI を使用してデータソースへの接続を作成する場合は、フォーリンカタログの作成が含まれているため、この手順をスキップできます。
フォーリンカタログは、Databricks と Unity Catalog を使用して、そのデータベース内のデータへのアクセスをクエリーおよび管理できるように、外部データ システム内のデータベースをミラーリングします。 フォーリンカタログを作成するには、すでに定義されているデータソースへの接続を使用します。
フォーリンカタログを作成するには、Catalog Explorer を使用するか、 Databricks ノートブックまたは Databricks SQL クエリエディタで CREATE FOREIGN CATALOG
を使用します。 Databricks REST API または Databricks CLI を使用してカタログを作成することもできます。 POST /api/2.1/unity-catalog/catalogs を参照してください。 または Unity Catalog コマンド。
必要なアクセス許可: メタストアに対する CREATE CATALOG
アクセス許可と、接続の所有権または接続に対する CREATE FOREIGN CATALOG
権限のいずれか。
Databricks ワークスペースで、[カタログ]をクリックしてカタログ・エクスプローラーを開きます。
[ カタログ ] ウィンドウの上部にある [ 追加 ] アイコンをクリックし、メニューから [ カタログの追加 ] を選択します。
または、[ クイック アクセス ] ページで [ カタログ ] ボタンをクリックし、[ カタログの作成 ] ボタンをクリックします。
(オプション)次のカタログ・プロパティを入力します。
データ プロジェクト ID: このカタログにマッピングされるデータを含む BigQuery プロジェクトの名前。 デフォルトは、接続レベルで設定された請求プロジェクト ID です。
「カタログの作成」のフォーリンカタログの作成手順に従ってください。
ノートブックまたは Databricks SQL エディターで次の SQL コマンドを実行します。 括弧内の項目はオプションです。 プレースホルダー値を置き換えます。
<catalog-name>
: Databricks のカタログの名前。<connection-name>
: データソース、パス、およびアクセス資格情報を指定する 接続オブジェクト 。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;
サポートされているプッシュダウン
次のプッシュダウンがサポートされています。
フィルター
予測
制限
関数: 部分的、フィルター式のみ。 (文字列関数、数学関数、データ関数、時刻関数、タイムスタンプ関数、およびその他の関数 (Alias、Cast、SortOrder など)
集計
並べ替え (制限付きで使用した場合)
結合 (Databricks Runtime 16.1 以降)
次のプッシュダウンはサポートされていません。
Windows の機能
データ型のマッピング
次の表に、BigQuery と Spark のデータ型のマッピングを示します。
BigQuery タイプ |
Spark タイプ |
---|---|
bignumeric, numeric |
DecimalType (10 進数型) |
int64 |
LongType |
float64 |
DoubleType |
array, geography, interval, json, string, struct |
VarcharType (可変文字型) |
bytes |
BinaryType |
bool |
BooleanType |
date |
DateType |
datetime, time, timestamp |
TimestampType/TimestampNTZType |
BigQuery から読み取る場合、BigQuery Timestamp
は Spark TimestampType
にマッピングされます ( preferTimestampNTZ = false
デフォルト)。 BigQuery Timestamp
は TimestampNTZType
にマッピングされます ( preferTimestampNTZ = true
の場合)。