Blob Storage BigLake テーブルを作成する
このドキュメントでは、Azure Blob Storage BigLake テーブルの作成方法について説明します。BigLake テーブルを使用すると、アクセス権の委任を使用して Blob Storage 内のデータをクエリできます。アクセス権の委任により、BigLake テーブルへのアクセス権と基盤となるデータストアへのアクセス権が分離されます。
BigQuery と Blob Storage の間のデータフローについては、データに対してクエリを実行する際のデータフローをご覧ください。
始める前に
Blob Storage のデータにアクセスするための接続があることを確認します。
必要なロール
外部テーブルを作成するために必要な権限を取得するには、データセットの BigQuery 管理者(roles/bigquery.admin
)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理に関する記事をご覧ください。
この事前定義ロールには、外部テーブルを作成するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
外部テーブルを作成するには、次の権限が必要です。
-
bigquery.tables.create
-
bigquery.connections.delegate
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
データセットを作成する
外部テーブルを作成する前に、サポートされているリージョンにデータセットを作成する必要があります。次のオプションのいずれかを選択します。コンソール
[BigQuery] ページに移動します。
- [エクスプローラ] ペインで、データセットを作成するプロジェクトを選択します。
- (アクションを表示)オプションを開き、[データセットを作成] をクリックします。
- [データセットを作成] ページで、次の詳細を指定します。
- [データセット ID] に、データセットの一意の名前を入力します。
- [データのロケーション] で、サポートされているリージョンを選択します。
- 省略可: テーブルを自動的に削除するには、[テーブルの有効期限を有効にする] チェックボックスをオンにして、[デフォルトのテーブル最長存続期間] を日数で設定します。テーブルが期限切れになっても、Azure のデータは削除されません。
- デフォルトの照合を使用する場合は、[詳細オプション] セクションを開いて、[デフォルトの照合を有効にする] オプションを選択します。
- [データセットを作成] をクリックします。
SQL
CREATE SCHEMA
DDL ステートメントを使用します。次の例では、azure-eastus2
リージョンにデータセットが作成されます。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE SCHEMA mydataset OPTIONS ( location = 'azure-eastus2');
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
コマンドライン環境で bq mk
コマンドを使用してデータセットを作成します。
bq --location=LOCATION mk \ --dataset \ PROJECT_ID:DATASET_NAME
--project_id
パラメータは、デフォルト プロジェクトをオーバーライドします。
次のように置き換えます。
LOCATION
: データセットのロケーションサポートされているリージョンの詳細については、ロケーションをご覧ください。 データセットを作成した後に、そのロケーションを変更することはできません。ロケーションのデフォルト値は、
.bigqueryrc
ファイルを使用して設定できます。PROJECT_ID
: プロジェクト IDDATASET_NAME
: 作成するデータセットの名前デフォルト プロジェクト以外のプロジェクト内にデータセットを作成するには、
PROJECT_ID:DATASET_NAME
の形式でそのプロジェクト ID をデータセット名に追加します。
パーティション分割されていないデータに対して BigLake テーブルを作成する
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
[エクスプローラ] ペインでプロジェクトを開き、データセットを選択します。
[データセット情報] セクションで、[
テーブルを作成] をクリックします。[テーブルの作成] ページの [ソース] セクションで、次の操作を行います。
- [テーブルの作成元] で [Azure Blob Storage] を選択します。
[Azure Blob Storage のパスの選択] に、Blob Storage のパスを次の形式で入力します。
azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH
次のように置き換えます。
AZURE_STORAGE_ACCOUNT_NAME
: Blob Storage アカウントの名前。アカウントのリージョンは、データセットのリージョンと同じものにする必要があります。CONTAINER_NAME
: Blob Storage コンテナの名前。FILE_PATH
: Blob Storage データを指すデータパス。たとえば、単一の CSV ファイルの場合、FILE_PATH
はmyfile.csv
のように指定します。
[ファイル形式] で、Azure のデータ形式を選択します。サポートされている形式は、AVRO、CSV、DELTA_LAKE、ICEBERG、JSONL、ORC、PARQUET です。
[送信先] セクションで、次の操作を行います。
- [データセット] で、該当するデータセットを選択します。
- [テーブル] フィールドにテーブルの名前を入力します。
- [テーブルタイプ] が [外部テーブル] に設定されていることを確認します。
- [接続 ID] で、プルダウンから該当する接続 ID を選択します。接続の詳細については、Blob Storage への接続をご覧ください。
[スキーマ] セクションで、スキーマの自動検出を有効にするか、ソースファイルがある場合はスキーマを手動で指定できます。ソースファイルがない場合は、スキーマを手動で指定する必要があります。
スキーマの自動検出を有効にするには、[自動検出] オプションをオンにします。
手動でスキーマを指定するには、[自動検出] オプションをオフにしておきます。[テキストとして編集] を有効にし、テーブル スキーマを JSON 配列として入力します。
[テーブルを作成] をクリックします。
SQL
BigLake テーブルを作成するには、WITH CONNECTION
句を指定した CREATE EXTERNAL TABLE
ステートメントを使用します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE EXTERNAL TABLE DATASET_NAME.TABLE_NAME WITH CONNECTION `AZURE_LOCATION.CONNECTION_NAME` OPTIONS ( format = 'DATA_FORMAT', uris = ['azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH']);
次のように置き換えます。
DATASET_NAME
: 作成したデータセットの名前。TABLE_NAME
: このテーブルに設定する名前。AZURE_LOCATION
: Google Cloud の Azure ロケーション(例:azure-eastus2
)CONNECTION_NAME
: 作成した接続の名前。DATA_FORMAT
: サポートされているいずれかの BigQuery 連携形式(AVRO
、CSV
、DELTA_LAKE
、ICEBERG
など)(プレビュー)。AZURE_STORAGE_ACCOUNT_NAME
: Blob Storage アカウントの名前CONTAINER_NAME
: Blob Storage コンテナの名前FILE_PATH
: Blob Storage データを指すデータパス。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
例:
CREATE EXTERNAL TABLE absdataset.abstable WITH CONNECTION `azure-eastus2.abs-read-conn` OPTIONS ( format = 'CSV', uris = ['azure://account_name.blob.core.windows.net/container/path/file.csv']);
bq
テーブル定義ファイルを作成します。
bq mkdef \ --source_format=DATA_FORMAT \ --connection_id=AZURE_LOCATION.CONNECTION_NAME \ "azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH" > table_def
次のように置き換えます。
DATA_FORMAT
: サポートされているいずれかの BigQuery 連携形式(AVRO
、CSV
、ICEBERG
、PARQUET
など)。AZURE_LOCATION
: Google Cloud の Azure ロケーション(例:azure-eastus2
)CONNECTION_NAME
: 作成した接続の名前AZURE_STORAGE_ACCOUNT_NAME
: Blob Storage アカウントの名前CONTAINER_NAME
: Blob Storage コンテナの名前FILE_PATH
: Blob Storage データを指すデータパス。
次に、BigLake テーブルを作成します。
bq mk --external_table_definition=table_def DATASET_NAME.TABLE_NAME
次のように置き換えます。
DATASET_NAME
: 作成したデータセットの名前TABLE_NAME
: このテーブルに設定する名前
たとえば、次のコマンドは新しい BigLake テーブル(my_dataset.my_table
)を作成します。これは、パス azure://account_name.blob.core.windows.net/container/path
に格納される Blob Storage データに対するクエリを実行でき、ロケーション azure-eastus2
に対する読み取り接続を持ちます。
bq mkdef \ --source_format=AVRO \ --connection_id=azure-eastus2.read-conn \ "azure://account_name.blob.core.windows.net/container/path" > table_def bq mk \ --external_table_definition=table_def my_dataset.my_table
API
tables.insert
API メソッドを呼び出して、Table
リソースに ExternalDataConfiguration
を作成します。
schema
プロパティを指定するか autodetect
プロパティを true
に設定して、サポートされているデータソースのスキーマの自動検出を有効にします。
connectionId
プロパティを指定して、Blob Storage への接続に使用する接続を特定します。
パーティション分割データに対して BigLake テーブルを作成する
Blob Storage では、Hive パーティション分割データ用の BigLake テーブルを作成できます。外部パーティション分割テーブルを作成した後に、パーティション キーを変更することはできません。パーティション キーを変更するには、テーブルを再作成する必要があります。
Hive パーティション分割データに基づいて BigLake テーブルを作成するには、次のいずれかのオプションを選択します。
コンソール
[BigQuery] ページに移動します。
[エクスプローラ] ペインでプロジェクトを開いて、データセットを選択します。
[アクションを表示] をクリックしてから、[テーブルを作成] をクリックします。これで、[テーブルを作成] ペインが開きます。
[送信元] セクションで、次の詳細を指定します。
[テーブルの作成元] で、次のいずれかのオプションを選択します。
- Amazon S3
- Azure Blob Storage
ワイルドカードを使用してフォルダへのパスを指定します。次に例を示します。
- Amazon S3 の場合:
s3://mybucket/*
- Blob Storage の場合:
azure://mystorageaccount.blob.core.windows.net/mycontainer/*
このフォルダは、作成、追加、または上書きするテーブルを含むデータセットと同じロケーションに存在する必要があります。
- Amazon S3 の場合:
[ファイル形式] リストでファイル形式を選択します。
[ソースデータ パーティショニング] チェックボックスをオンにして、次の詳細を指定します。
- [ソース URI の接頭辞を選択] で、URI 接頭辞を入力します。例:
s3://mybucket/my_files
- 省略可: このテーブルのすべてのクエリでパーティション フィルタを要求するには、[パーティション フィルタを要求] チェックボックスをオンにします。パーティション フィルタを要求すると、コストが削減され、パフォーマンスが向上する場合があります。詳細については、クエリ内のパーティション キーに対する必須の述語フィルタをご覧ください。
[パーティション推論モード] セクションで、次のいずれかのオプションを選択します。
- 種類を自動的に推測します: パーティション スキーマ検出モードを
AUTO
に設定します。 - すべての列は文字列です: パーティション スキーマ検出モードを
STRINGS
に設定します。 - 独自に指定します: パーティション スキーマ検出モードを
CUSTOM
に設定し、パーティション キーのスキーマ情報を手動で入力します。詳細については、カスタム パーティション キー スキーマの指定をご覧ください。
- 種類を自動的に推測します: パーティション スキーマ検出モードを
- [ソース URI の接頭辞を選択] で、URI 接頭辞を入力します。例:
[送信先] セクションで、次の詳細を指定します。
- [プロジェクト] で、テーブルを作成するプロジェクトを選択します。
- [データセット] で、テーブルを作成するデータセットを選択します。
- [テーブル] に、作成するテーブルの名前を入力します。
- [テーブルタイプ] で [外部テーブル] が選択されていることを確認します。
- [接続 ID] で、先ほど作成した接続を選択します。
[スキーマ] セクションで、スキーマの自動検出を有効にするか、ソースファイルがある場合はスキーマを手動で指定できます。ソースファイルがない場合は、スキーマを手動で指定する必要があります。
スキーマの自動検出を有効にするには、[自動検出] オプションをオンにします。
手動でスキーマを指定するには、[自動検出] オプションをオフにしておきます。[テキストとして編集] を有効にし、テーブル スキーマを JSON 配列として入力します。
スキーマと一致しない追加の列値を持つ行を無視するには、[詳細オプション] セクションを開いて [不明な値] を選択します。
[テーブルを作成] をクリックします。
SQL
CREATE EXTERNAL TABLE
DDL ステートメントを使用します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS ( PARTITION_COLUMN PARTITION_COLUMN_TYPE, ) WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS ( hive_partition_uri_prefix = "HIVE_PARTITION_URI_PREFIX", uris=['FILE_PATH'], format ="TABLE_FORMAT" );
次のように置き換えます。
PROJECT_ID
: テーブルを作成するプロジェクトの名前(例:myproject
)DATASET
: テーブルを作成する BigQuery データセットの名前(例:mydataset
)EXTERNAL_TABLE_NAME
: 作成するテーブルの名前(例:mytable
)PARTITION_COLUMN
: パーティショニング列の名前。PARTITION_COLUMN_TYPE
: パーティショニング列の型REGION
: 接続を含むリージョン(例:us
)CONNECTION_ID
: 接続の名前(例:myconnection
)HIVE_PARTITION_URI_PREFIX
: Hive パーティショニング URI プレフィックス。例:s3://mybucket/
azure://mystorageaccount.blob.core.windows.net/mycontainer/
FILE_PATH
: 作成する外部テーブルのデータソースへのパス。例:s3://mybucket/*.parquet
azure://mystorageaccount.blob.core.windows.net/mycontainer/*.parquet
TABLE_FORMAT
: 作成するテーブルの形式(例:PARQUET
)
[
実行] をクリックします。
クエリの実行方法について詳しくは、インタラクティブ クエリを実行するをご覧ください。
例
次の例では、Amazon S3 のパーティション分割データに対する BigLake テーブルを作成します。スキーマは自動検出されます。
CREATE EXTERNAL TABLE `my_dataset.my_table` WITH PARTITION COLUMNS ( sku STRING, ) WITH CONNECTION `us.my-connection` OPTIONS( hive_partition_uri_prefix = "s3://mybucket/products", uris = ['s3://mybucket/products/*'] );
次の例では、Blob Storage のパーティション分割データに対する BigLake テーブルを作成します。スキーマを指定します。
CREATE EXTERNAL TABLE `my_dataset.my_table` ( ProductId INTEGER, ProductName, STRING, ProductType, STRING ) WITH PARTITION COLUMNS ( sku STRING, ) WITH CONNECTION `us.my-connection` OPTIONS( hive_partition_uri_prefix = "azure://mystorageaccount.blob.core.windows.net/mycontainer/products", uris = ['azure://mystorageaccount.blob.core.windows.net/mycontainer/*'] );
bq
まず、bq mkdef
コマンドを使用してテーブル定義ファイルを作成します。
bq mkdef \ --source_format=SOURCE_FORMAT \ --connection_id=REGION.CONNECTION_ID \ --hive_partitioning_mode=PARTITIONING_MODE \ --hive_partitioning_source_uri_prefix=URI_SHARED_PREFIX \ --require_hive_partition_filter=BOOLEAN \ URIS > DEFINITION_FILE
次のように置き換えます。
SOURCE_FORMAT
: 外部データソースの形式。例:CSV
REGION
: 接続を含むリージョン(例:us
)。CONNECTION_ID
: 接続の名前(例:myconnection
)。PARTITIONING_MODE
: Hive パーティショニング モード。次の値のいずれかを使用できます。AUTO
: キー名と型を自動的に検出します。STRINGS
: キー名を自動的に文字列に変換します。CUSTOM
: ソース URI 接頭辞でキースキーマをエンコードします。
URI_SHARED_PREFIX
: ソース URI 接頭辞。BOOLEAN
: クエリ時に述語フィルタを要求するかどうかを指定します。このフラグは省略可能です。デフォルト値はfalse
です。URIS
: ワイルドカード形式を使用する Amazon S3 または Blob Storage フォルダへのパス。DEFINITION_FILE
: ローカルマシン上のテーブル定義ファイルへのパス。
PARTITIONING_MODE
が CUSTOM
の場合、次の形式を使用して、ソース URI プレフィックスにパーティション キー スキーマを含めます。
--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...
テーブル定義ファイルを作成したら、bq mk
コマンドを使用して BigLake テーブルを作成します。
bq mk --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
次のように置き換えます。
DEFINITION_FILE
: テーブル定義ファイルへのパス。DATASET_NAME
: テーブルを含むデータセットの名前。TABLE_NAME
: 作成するテーブルの名前。SCHEMA
: JSON スキーマ ファイルへのパスを指定するか、field:data_type,field:data_type,...
形式のスキーマを指定します。スキーマの自動検出を使用するには、この引数を省略します。
例
次の例では、Amazon S3 データに対して AUTO
Hive パーティショニング モードを使用します。
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
--metadata_cache_mode=AUTOMATIC \
s3://mybucket/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
次の例では、Amazon S3 データに対して STRING
Hive パーティショニング モードを使用します。
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=STRING \
--hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
s3://mybucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
次の例では、Blob Storage データに対して CUSTOM
Hive パーティショニング モードを使用します。
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=CUSTOM \
--hive_partitioning_source_uri_prefix=azure://mystorageaccount.blob.core.windows.net/mycontainer/{dt:DATE}/{val:STRING} \
azure://mystorageaccount.blob.core.windows.net/mycontainer/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
BigQuery API を使用して Hive パーティショニングを設定するには、テーブル定義ファイルを作成する際に、ExternalDataConfiguration
オブジェクトに hivePartitioningOptions
オブジェクトを含めます。BigLake テーブルを作成するには、connectionId
フィールドの値も指定する必要があります。
hivePartitioningOptions.mode
フィールドを CUSTOM
に設定した場合、hivePartitioningOptions.sourceUriPrefix
フィールドのパーティション キースキーマを次のように入力します。s3://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...
クエリの実行時に述語フィルタの使用を強制するには、hivePartitioningOptions.requirePartitionFilter
フィールドを true
に設定します。
Delta Lake テーブル
この機能に関するフィードバックやサポートをリクエストするには、[email protected] までメールを送信してください。
Delta Lake は、ペタバイト規模のデータテーブルをサポートするオープンソースのテーブル形式です。Delta Lake のテーブルは一時テーブルと永続テーブルの両方としてクエリでき、BigLake テーブルとしてサポートされています。
スキーマの同期
Delta Lake は、正規スキーマをメタデータの一部として維持します。JSON メタデータ ファイルを使用してスキーマを更新することはできません。スキーマを更新するには:
--autodetect_schema
フラグを指定してbq update
コマンドを使用します。bq update --autodetect_schema PROJECT_ID:DATASET.TABLE
次のように置き換えます。
PROJECT_ID
: 更新するテーブルを含むプロジェクト IDDATASET
: 更新するテーブルを含むデータセットTABLE
: 更新するテーブル。
型変換
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 テーブルには以下の制限が適用されます。
Delta Lake テーブルには、外部テーブルの制限が適用されます。
Delta Lake テーブルは BigQuery Omni でのみサポートされており、関連する制限事項があります。
新しい JSON メタデータ ファイルでテーブルを更新することはできません。自動検出スキーマ テーブル更新オペレーションを使用する必要があります。詳細については、スキーマの同期をご覧ください。
BigLake のセキュリティ機能は、BigQuery サービスからアクセスされた場合にのみ、Delta Lake テーブルを保護します。
Delta Lake テーブルを作成する
次の例では、CREATE EXTERNAL
TABLE
ステートメントを使用して、Delta Lake 形式で外部テーブルを作成します。
CREATE [OR REPLACE] EXTERNAL TABLE table_name WITH CONNECTION connection_name OPTIONS ( format = 'DELTA_LAKE', uris = ["parent_directory"] );
次のように置き換えます。
table_name: テーブル名。
connection_name: 接続の名前。接続では、Amazon S3 または Blob Storage のソースを指定する必要があります。
parent_directory: 親ディレクトリの URI。
Delta Lake を使用したクロスクラウド転送
次の例では、LOAD DATA
ステートメントを使用して、適切なテーブルにデータを読み込みます。
LOAD DATA [INTO | OVERWRITE] table_name FROM FILES ( format = 'DELTA_LAKE', uris = ["parent_directory"] ) WITH CONNECTION connection_name;
クロスクラウド データ転送の詳細な例については、クロスクラウド オペレーションでデータを読み込むをご覧ください。
BigLake テーブルにクエリを実行する
詳細については、Blob Storage データに対してクエリを実行するをご覧ください。
INFORMATION_SCHEMA
でリソース メタデータを表示する
リソース メタデータは INFORMATION_SCHEMA
ビューで確認できます。JOBS_BY_*
、JOBS_TIMELINE_BY_*
、RESERVATION*
のビューに対してクエリを行う場合は、テーブルのリージョンと同じ場所に配置されているクエリの処理ロケーションを指定する必要があります。BigQuery Omni のロケーションの詳細については、ロケーションをご覧ください。他のすべてのシステム テーブルでは、クエリジョブのロケーションの指定は任意です。
BigQuery Omni がサポートするシステム テーブルについては、制限事項をご覧ください。
JOBS_*
システム テーブルと RESERVATION*
システム テーブルに対してクエリを実行するには、次のいずれかの方法で処理を行うロケーションを指定します。
コンソール
[BigQuery] ページに移動します。
[エディタ] タブが表示されていない場合は、[
クエリを新規作成] をクリックします。[その他] > [クエリ設定] をクリックします。[クエリの設定] ダイアログが開きます。
[クエリの設定] ダイアログの [追加の設定] > [データのロケーション] で、BigQuery Omni リージョンと同じ場所に配置されている BigQuery リージョンを選択します。たとえば、BigQuery Omni リージョンが
aws-us-east-1
の場合は、us-east4
を指定します。残りのフィールドを選択して、[保存] をクリックします。
bq
ジョブの処理を行うロケーションを、BigQuery Omni リージョンと同じ場所に配置される BigQuery リージョンに設定するには、--location
フラグを使用します。たとえば、BigQuery Omni リージョンが aws-us-east-1
の場合は、us-east4
を指定します。
例
bq query --use_legacy_sql=false --location=us-east4 \
"SELECT * FROM region-azure-eastus2.INFORMATION_SCHEMA.JOBS limit 10;"
API
プログラムでジョブを実行する場合は、ロケーション引数を BigQuery Omni リージョンと同じ場所に配置される BigQuery リージョンに設定します。たとえば、BigQuery Omni リージョンが aws-us-east-1
の場合は、us-east4
を指定します。
VPC Service Controls
防御強化のため、VPC Service Controls の境界を使用して、BigQuery Omni から外部クラウド サービスへのアクセスを制限できます。たとえば、VPC Service Controls の境界により、BigQuery Omni テーブルから特定の Amazon S3 バケットまたは Blob Storage コンテナへのエクスポートを制限できます。
VPC Service Controls の詳細については、VPC Service Controls の概要をご覧ください。
必要な権限
サービス境界を構成するために必要な権限があることを確認します。VPC Service Controls を構成するために必要な IAM ロールの一覧を表示するには、VPC Service Controls のドキュメントの IAM を使用したアクセス制御をご覧ください。
Google Cloud コンソールを使用して VPC Service Controls を設定する
Google Cloud コンソールのナビゲーション メニューで [セキュリティ] をクリックし、続いて [VPC Service Controls] をクリックします。
BigQuery Omni の VPC Service Controls を設定するには、サービス境界を作成するガイドの手順に沿って作業します。[下り(外向き)ルール] ペインが表示されたら、次の手順を行います。
[下り(外向き)ルール] ペインで [ルールの追加] をクリックします。
[API クライアントの FROM 属性] セクションで、[ID] リストからオプションを選択します。
[外部リソースの TO 属性] を選択します。
外部リソースを追加するには、[Add external resources] をクリックします。
[Add external resource] ダイアログで、[External resource name] に有効なリソース名を入力します。次に例を示します。
Amazon Simple Storage Service(Amazon S3)の場合:
s3://BUCKET_NAME
BUCKET_NAME は、Amazon S3 バケットの名前に置き換えます。
Azure Blob Storage の場合:
azure://myaccount.blob.core.windows.net/CONTAINER_NAME
CONTAINER NAME は、Blob Storage コンテナの名前に置き換えます。
下り(外向き)ルールの属性の一覧については、下り(外向き)ルールのリファレンスをご覧ください。
外部リソースで許可するメソッドを選択します。
- すべてのメソッドを許可する場合は、[メソッド] リストで [All methods] を選択します。
- 特定のメソッドを許可する場合は、[Selected method] を選択し、[メソッドを選択] をクリックしてから、外部リソースに対して許可するメソッドを選択します。
[境界を作成] をクリックします。
gcloud CLI を使用して VPC Service Controls を設定する
gcloud CLI を使用して VPC Service Controls を設定する手順は、次のとおりです。
デフォルトのアクセス ポリシーを設定する
アクセス ポリシーは、アクセスレベルとサービス境界用の組織全体のコンテナです。デフォルトのアクセス ポリシーの設定、またはアクセス ポリシー名の取得については、アクセス ポリシーの管理をご覧ください。
下り(外向き)ポリシー入力ファイルを作成する
下り(外向き)ルールのブロックは、境界からその境界外のリソースへ許可されるアクセスを定義します。外部リソースの場合、externalResources
プロパティは、VPC Service Controls の境界内からアクセスできる外部リソースパスを定義します。
下り(外向き)ルールは、JSON ファイルまたは YAML ファイルを使用して構成できます。次のサンプルでは、.yaml
形式を使用します。
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" *OR* - permission: "externalResource.read" externalResources: - EXTERNAL_RESOURCE_PATH egressFrom: identityType: IDENTITY_TYPE *OR* identities: - serviceAccount:SERVICE_ACCOUNT
egressTo
- 境界外の指定されたプロジェクトの Google Cloud リソースに対して許可されているサービス オペレーションを一覧表示します。operations
:from
ブロック条件を満たすクライアントがアクセスを許可され、アクセスが可能なサービスとアクション / メソッドを一覧表示します。serviceName
: BigQuery Omni にbigquery.googleapis.com
を設定します。methodSelectors
:from
条件を満たすクライアントがアクセスできるメソッドを一覧表示します。制限付きのメソッドとサービスの権限については、サポートされているサービス メソッドの制限をご覧ください。method
: 有効なサービス メソッド、またはすべてのserviceName
メソッドを許可する\"*\"
。permission
: 有効なサービス権限(\"*\"
、externalResource.read
、externalResource.write
など)。この権限を必要とするオペレーションでは、境界外のリソースにアクセスできます。externalResources
: 境界内のクライアントがアクセスできる外部リソースを一覧表示します。EXTERNAL_RESOURCE_PATH は、有効な Amazon S3 バケット(s3://bucket_name
など)または Blob Storage コンテナパス(azure://myaccount.blob.core.windows.net/container_name
など)に置き換えます。egressFrom
- 境界内の指定されたプロジェクトの Google Cloud リソースに対して許可されているサービス オペレーションを一覧表示します。identityType
またはidentities
: 境界外の指定されたリソースにアクセスできる ID タイプを定義します。IDENTITY_TYPE は、次のいずれかの有効な値に置き換えます。ANY_IDENTITY
: すべての ID を許可します。ANY_USER_ACCOUNT
: すべてのユーザーを許可します。ANY_SERVICE_ACCOUNT
: すべてのサービス アカウントを許可します。
identities
: 境界外の指定リソースにアクセスできるサービス アカウントを一覧表示します。serviceAccount
(省略可): SERVICE_ACCOUNT を、境界外の指定されたリソースにアクセスできるサービス アカウントに置き換えます。
例
次の例は、境界内からの AWS 内の s3://mybucket
Amazon S3 ロケーションへの下り(外向き)オペレーションを許可するポリシーです。
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - s3://mybucket - s3://mybucket2 egressFrom: identityType: ANY_IDENTITY
次の例では、Blob Storage コンテナへの下り(外向き)オペレーションを許可します。
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - azure://myaccount.blob.core.windows.net/mycontainer egressFrom: identityType: ANY_IDENTITY
下り(外向き)ポリシーの詳細については、下り(外向き)ルールのリファレンスをご覧ください。
下り(外向き)ポリシーを追加する
新しいサービス境界を作成するときに下り(外向き)ポリシーを追加するには、gcloud access-context-manager perimeters create
コマンドを使用します。たとえば、次のコマンドは、プロジェクト番号 12345
を持つプロジェクトを含む omniPerimeter
という名前の新しい境界を作成し、BigQuery API を制限して、egress.yaml
ファイルで定義されている下り(外向き)ポリシーを追加します。
gcloud access-context-manager perimeters create omniPerimeter \ --title="Omni Perimeter" \ --resources=projects/12345 \ --restricted-services=bigquery.googleapis.com \ --egress-policies=egress.yaml
既存のサービス境界に下り(外向き)ポリシーを追加するには、gcloud access-context-manager perimeters update
コマンドを使用します。たとえば、次のコマンドは、egress.yaml
ファイルで定義されている下り(外向き)ポリシーを omniPerimeter
という名前の既存のサービス境界に追加します。
gcloud access-context-manager perimeters update omniPerimeter --set-egress-policies=egress.yaml
境界を確認する
境界を確認するには、gcloud access-context-manager perimeters describe
コマンドを使用します。
gcloud access-context-manager perimeters describe PERIMETER_NAME
PERIMETER_NAME は、境界の名前に置き換えます。
たとえば、次のコマンドは境界 omniPerimeter
を記述します。
gcloud access-context-manager perimeters describe omniPerimeter
詳細については、サービス境界を管理するをご覧ください。
BigQuery Omni VPC から Blob Storage へのアクセスを許可する
この機能に関するフィードバックやサポートをご希望の場合は、[email protected] 宛てにメールを送信してください。
BigQuery 管理者は、ネットワーク ルールを作成して、BigQuery Omni に Blob Storage リソースへのアクセス権を付与できます。これにより、承認された BigQuery Omni VPC のみが Blob Storage を操作できるため、データのセキュリティが強化されます。
BigQuery Omni VPC にネットワーク ルールを適用する
ネットワーク ルールを適用するには、Azure PowerShell または Terraform を使用します。
Azure PowerShell
次のコマンドを実行して、取得した BigQuery Omni サブネット ID を VirtualNetworkResourceId
として指定するネットワーク ルールをストレージ アカウントに追加します。
Add-AzStorageAccountNetworkRule` -ResourceGroupName "RESOURCE_GROUP_NAME"` -Name "STORAGE_ACCOUNT_NAME"` -VirtualNetworkResourceId "SUBNET_ID1","SUBNET_ID2"
次のように置き換えます。
RESOURCE_GROUP_NAME
: リソース グループ名。STORAGE_ACCOUNT_NAME
: ストレージ アカウント名。SUBNET_ID1
、SUBNET_ID1
: サブネット ID。この情報は、このページの表で確認できます。
Terraform
Terraform 構成ファイルに以下の内容を追加します。
resource "azurerm_storage_account_network_rules" "example" { storage_account_name = "STORAGE_ACCOUNT_NAME" resource_group_name = "RESOURCE_GROUP_NAME" default_action = "Allow" bypass = ["Logging", "Metrics", "AzureServices"] virtual_network_subnet_ids = ["SUBNET_ID1","SUBNET_ID2"] }
次のように置き換えます。
STORAGE_ACCOUNT_NAME
: ストレージ アカウント名。RESOURCE_GROUP_NAME
: リソース グループ名。SUBNET_ID1
、SUBNET_ID1
: サブネット ID。この情報は、このページの表で確認できます。
BigQuery Omni VPC リソース ID
リージョン | サブネット ID |
---|---|
azure-eastus2 |
/subscriptions/95f30708-58d1-48ba-beac-d71870c3b2f5/resourceGroups/bqe-prod-eastus2-resource-group/providers/Microsoft.Network/virtualNetworks/bqe-prod-eastus2-network/subnets/azure-prod-eastus21-yurduaaaaa-private /subscriptions/95f30708-58d1-48ba-beac-d71870c3b2f5/resourceGroups/bqe-prod-eastus2-resource-group/providers/Microsoft.Network/virtualNetworks/bqe-prod-eastus2-network/subnets/azure-prod-eastus22-yurduaaaab-private |
制限事項
Amazon S3 と Blob Storage に基づく BigLake テーブルに適用される制限事項の全リストについては、制限事項をご覧ください。
次のステップ
- BigQuery Omni について確認する。
- BigLake テーブルについて確認する。
- クエリ結果を Blob Storage にエクスポートする方法を確認する。