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