Delta Lake BigLake テーブルを作成する
BigLake を使用すると、きめ細かなアクセス制御で Delta Lake テーブルにアクセスできます。Delta Lake は、Databricks が開発したオープンソースの表形式データのストレージ フォーマットで、ペタバイト規模のデータテーブルをサポートしています。
BigQuery では、Delta Lake テーブルに対して次の機能をサポートしています。
- アクセス権の委任: アクセス権の委任を使用して、外部データストアの構造化データをクエリします。アクセス権の委任により、Delta Lake テーブルへのアクセスを、基盤となるデータストアへのアクセスから切り離すことができます。
- きめ細かいアクセス制御: テーブルレベルできめ細かいセキュリティを適用します。たとえば、行レベルと列レベルのセキュリティを提供します。Cloud Storage に基づく Delta Lake テーブルの場合は、動的データ マスキングも使用できます。
- スキーマ進化: Delta Lake テーブルのスキーマの変更が自動的に検出されます。スキーマの変更は BigQuery テーブルに反映されます。
Delta Lake テーブルを BigLake テーブルとして構成すると、BigLake のすべての機能がサポートされます。
始める前に
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery Connection and BigQuery Reservation APIs.
-
In the Google Cloud console, activate Cloud Shell.
BigQuery データセットがあることを確認します。
Google Cloud SDK のバージョンが 366.0.0 以降であることを確認します。
gcloud version
必要に応じて、Google Cloud SDK を更新します。
外部データソースに基づいてクラウド リソース接続を作成し、その接続に Cloud Storage へのアクセス権を付与します。接続を作成するための適切な権限が付与されていない場合は、接続を作成して共有するよう BigQuery 管理者に依頼してください。
必要なロール
Delta Lake テーブルを作成するには、次の権限が必要です。
bigquery.tables.create
bigquery.connections.delegate
BigQuery 管理者(roles/bigquery.admin
)IAM 事前定義ロールには、これらの権限が含まれています。
このロールのプリンシパルでない場合は、これらの権限の付与、または Delta Lake テーブルの作成を管理者に依頼してください。
また、BigQuery ユーザーがテーブルにクエリを実行できるようにするには、接続に関連付けられたサービス アカウントに次の権限とアクセス権が必要です。
- BigQuery 閲覧者(
roles/bigquery.viewer
)ロール - BigQuery 接続ユーザー(
roles/bigquery.connectionUser
)ロール - そのデータを含む Cloud Storage バケットへのアクセス権
BigQuery での Identity and Access Management のロールと権限の詳細については、事前定義ロールと権限をご覧ください。
Delta Lake でテーブルを作成する
Delta Lake テーブルを作成するには、次の操作を行います。
SQL
CREATE EXTERNAL TABLE
ステートメントを使用して、Delta Lake テーブルを作成します。
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.DELTALAKE_TABLE_NAME`
WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
format ="DELTA_LAKE",
uris=['DELTA_TABLE_GCS_BASE_PATH']);
次の値を置き換えます。
- PROJECT_ID: Delta Lake テーブルを作成するプロジェクトの ID
- DATASET: Delta Lake テーブルを含む BigQuery データセット
- DELTALAKE_TABLE_NAME: Delta Lake テーブルの名前
- REGION: Delta Lake テーブルを作成するための接続を含むリージョン(例:
us
) CONNECTION_ID: 接続 ID(例:
myconnection
)Google Cloud コンソールで接続の詳細を表示する場合、接続 ID は [接続 ID] に表示される完全修飾接続 ID の最後のセクションの値になります(例:
projects/myproject/locations/connection_location/connections/myconnection
)。DELTA_TABLE_GCS_BASE_PATH: Delta Lake テーブルの接頭辞
bq
コマンドライン環境で、bq mk
コマンドを使用して Delta Lake テーブルを作成します。
bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
次の値を置き換えます。
- DEFINITION_FILE: テーブル定義ファイルへのパス
- PROJECT_ID: Delta Lake テーブルを作成するプロジェクトの ID
- DATASET: Delta Lake テーブルを含む BigQuery データセット
- DELTALAKE_TABLE_NAME: Delta Lake テーブルの名前
REST
BigQuery API を使用して、tables.insert
API メソッドを呼び出して Delta Lake テーブルを作成します。
REQUEST='{
"autodetect": true,
"externalDataConfiguration": {
"sourceFormat": "DELTA_LAKE",
"connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
"sourceUris": [
"DELTA_TABLE_GCS_BASE_PATH"
],
},
"tableReference": {
"tableId": "DELTALAKE_TABLE_NAME"
}
}'
echo $REQUEST | curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables?autodetect_schema=true
次の値を置き換えます。
- PROJECT_ID: Delta Lake テーブルを作成するプロジェクトの ID
- REGION: Delta Lake テーブルを作成するための接続を含むリージョン(例:
us
) CONNECTION_ID: 接続 ID(例:
myconnection
)Google Cloud コンソールで接続の詳細を表示する場合、接続 ID は [接続 ID] に表示される完全修飾接続 ID の最後のセクションの値になります(例:
projects/myproject/locations/connection_location/connections/myconnection
)。DELTA_TABLE_GCS_BASE_PATH: Delta Lake テーブルの接頭辞
DELTALAKE_TABLE_NAME: Delta Lake テーブルの名前
DATASET: Delta Lake テーブルを含む BigQuery データセット
Delta Lake テーブルを作成するときに、Delta Lake 接頭辞がテーブルの URI として使用されます。たとえば、バケット gs://bucket/warehouse/basictable/_delta_log
にログがあるテーブルの場合、テーブルの URI は gs://bucket/warehouse/basictable
になります。Delta Lake テーブルにクエリを実行すると、BigQuery は接頭辞の下にあるデータを読み取ってテーブルの現在のバージョンを識別し、テーブルのメタデータとファイルを計算します。
Delta Lake テーブルを更新する
Delta Lake テーブルのスキーマを更新するには、次の操作を行います。
bq
コマンドライン環境で、bq update
コマンドを使用して、Delta Lake テーブルのスキーマを更新します。
bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
次の値を置き換えます。
- PROJECT_ID: Delta Lake テーブルを作成するプロジェクトの ID
- DATASET: Delta Lake テーブルを含む BigQuery データセット
- DELTALAKE_TABLE_NAME: Delta Lake テーブルの名前
REST
BigQuery API を使用して、tables.patch
API メソッドを呼び出して Delta Lake テーブルを更新します。
REQUEST='{
"externalDataConfiguration": {
"sourceFormat": "DELTA_LAKE",
"sourceUris": [
"DELTA_TABLE_GCS_BASE_PATH"
],
"connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
"autodetect": true
},
"tableReference": {
"tableId": "DELTALAKE_TABLE_NAME"
}
}'
echo $REQUEST |curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables
次の値を置き換えます。
- DELTA_TABLE_GCS_BASE_PATH: Delta Lake テーブルの接頭辞
- PROJECT_ID: Delta Lake テーブルを作成するプロジェクトの ID
- REGION: Delta Lake テーブルを作成するための接続を含むリージョン(例:
us
) CONNECTION_ID: 接続 ID(例:
myconnection
)Google Cloud コンソールで接続の詳細を表示する場合、接続 ID は [接続 ID] に表示される完全修飾接続 ID の最後のセクションの値になります(例:
projects/myproject/locations/connection_location/connections/myconnection
)。DELTALAKE_TABLE_NAME: Delta Lake テーブルの名前
DATASET: Delta Lake テーブルを含む BigQuery データセット
Delta Lake テーブルをクエリする
Delta Lake BigLake テーブルを作成すると、標準の BigQuery テーブルと同じように GoogleSQL 構文を使用してクエリを実行できます。次に例を示します。
SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
詳細については、BigLake テーブルの Cloud Storage データに対してクエリを行うをご覧ください。
データストアへの接続には、サービス アカウントに関連付けられた外部接続が使用されます。サービス アカウントがデータストアからデータを取得するため、ユーザーは Delta Lake テーブルにアクセスするだけで済みます。
データ マッピング
BigQuery は、次の表に示すように Delta Lake のデータ型を BigQuery のデータ型に変換します。
Delta Lake の型 | BigQuery の型 |
---|---|
boolean |
BOOL |
byte |
INT64 |
int |
INT64 |
long |
INT64 |
float |
FLOAT64 |
double |
FLOAT64 |
Decimal(P/S) |
精度に応じて NUMERIC または BIG_NUMERIC |
date |
DATE |
time |
TIME |
timestamp (not partition column) |
TIMESTAMP |
timestamp (partition column) |
DATETIME |
string |
STRING |
binary |
BYTES |
array<Type> |
ARRAY<Type> |
struct |
STRUCT |
map<KeyType, ValueType> |
ARRAY<Struct<key KeyType, value ValueType>> |
制限事項
Delta Lake テーブルには、BigLake テーブルの制限のほかに、次の制限もあります。
- 削除ベクトルと列マッピングのある Delta Lake リーダー バージョン 3 がサポートされます。
- 最後のログエントリ ファイルにリーダー バージョンをリストする必要があります。たとえば、新しいテーブルには
00000..0.json
を含める必要があります。 - 変更データ キャプチャ(CDC)オペレーションはサポートされていません。既存の CDC オペレーションは無視されます。
- スキーマは自動検出されます。BigQuery を使用してスキーマを変更することはできません。
- テーブルの列名は、BigQuery の列名の制限事項に準拠している必要があります。
- マテリアライズド ビューはサポートされていません。
- Read API は Delta Lake ではサポートされていません。