クロスクラウド オペレーションでデータを読み込む
BigQuery 管理者またはアナリストは、Amazon Simple Storage Service(Amazon S3)バケットまたは Azure Blob Storage から BigQuery テーブルにデータを読み込むことができます。転送されたデータをGoogle Cloud リージョンに存在するデータと結合し、BigQuery ML などの BigQuery 機能を利用できます。また、特定の外部ソースのマテリアライズド ビューのレプリカを作成して、BigQuery でそのデータを使用可能にすることもできます。
次の方法でデータを BigQuery に転送できます。
- LOAD DATAステートメントを使用して、Amazon S3 と Azure Blob Storage のファイルから BigQuery テーブルにデータを転送ます。
- CREATE TABLE AS SELECTステートメントを使用して、Amazon S3 または Blob Storage 内のファイルのデータをフィルタした結果を BigQuery テーブルに転送します。宛先テーブルにデータを追加するには、- INSERT INTO SELECTステートメントを使用します。 データ操作は、Amazon S3 または Blob Storage からデータを参照する外部テーブルに適用されます。
- 外部の Amazon S3、Apache Iceberg、Salesforce Data Cloud のデータのマテリアライズド ビューのレプリカを BigQuery データセットに作成します。これにより、それらのデータを BigQuery 内でローカルに使用できます。 
割り当てと上限
割り当てと上限の詳細については、クエリジョブの割り当てと上限をご覧ください。
始める前に
他のクラウドに存在するデータを読み込む、またはフィルタするために必要な読み取りアクセス権を Google Cloud に付与するには、接続を作成して共有するよう管理者に依頼してください。接続を作成する方法については、Amazon S3 に接続するまたは Blob Storage をご覧ください。
必要なロール
    
      クロスクラウド転送を使ったデータ読み込みに必要な権限を取得するには、データセットに対する BigQuery データ編集者(roles/bigquery.dataEditor)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
この事前定義ロールには、クロスクラウド転送を使用したデータ読み込みに必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
クロスクラウド転送を使用してデータを読み込むには、次の権限が必要です。
- 
                  bigquery.tables.create
- 
                  bigquery.tables.get
- 
                  bigquery.tables.updateData
- 
                  bigquery.tables.update
- 
                  bigquery.jobs.create
- 
                  bigquery.connections.use
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
BigQuery での IAM のロールの詳細については、BigQuery の IAM ロールと権限をご覧ください。
料金
LOAD ステートメントを使用してクラウド間で転送されたバイト数に対して課金されます。料金については、BigQuery Omni の料金の「Omni クロスクラウド データ転送」をご覧ください。
CREATE TABLE AS SELECT ステートメントまたは INSERT INTO SELECT ステートメントを使用してクラウド間で転送されたバイト数と、コンピューティング容量に対して課金されます。
LOAD ステートメントと CREATE TABLE AS SELECT ステートメントの両方では、Amazon S3 ファイルと Blob Storage ファイルをスキャンして読み込む目的で BigQuery Omni リージョン内のスロットが必要です。詳しくは、BigQuery Omni の料金をご覧ください。
外部データソースのマテリアライズド ビューのレプリカについては、マテリアライズド ビューの料金も費用に含まれる場合があります。
読み込みとフィルタのオプションに関するベスト プラクティス
- 5 MB 未満のファイルを複数読み込むことは避けてください。代わりに、ファイル用の外部テーブルを作成し、クエリ結果を Amazon S3 または Blob Storage にエクスポートしてより大きなファイルを作成します。この方法は、データの転送時間を改善するのに役立ちます。 最大クエリ結果の上限については、BigQuery Omni の最大クエリ結果サイズをご覧ください。
- ソースデータが gzip 圧縮ファイル内にある場合は、外部テーブルを作成するときに external_table_options.compressionオプションをGZIPに設定します。
データの読み込み
BigQuery にデータを読み込むには、LOAD DATA [INTO|OVERWRITE] ステートメントを使用できます。
制限事項
- 接続と宛先データセットは、同じプロジェクトに属している必要があります。プロジェクトをまたぐデータの読み込みは、サポートされていません。
- LOAD DATAは、Amazon Simple Storage Service(Amazon S3)または Azure Blob Storage から同じロケーションの BigQuery リージョンにデータを転送する場合にのみサポートされます。詳細については、ロケーションをご覧ください。- 任意の USリージョンからUSマルチリージョンにデータを転送できます。任意のEUリージョンからEUマルチリージョンに転送することもできます。
 
- 任意の 
例
例 1
次の例では、自動検出スキーマを使用して、sample.parquet という名前の Parquet ファイルを Amazon S3 バケットから test_parquet テーブルに読み込みます。
LOAD DATA INTO mydataset.testparquet FROM FILES ( uris = ['s3://test-bucket/sample.parquet'], format = 'PARQUET' ) WITH CONNECTION `aws-us-east-1.test-connection`
例 2
次の例では、接頭辞 sampled* を持つ CSV ファイルを Blob Storage から test_csv テーブルに読み込み、事前定義された列が時間でパーティショニングされます。
LOAD DATA INTO mydataset.test_csv (Number INT64, Name STRING, Time DATE) PARTITION BY Time FROM FILES ( format = 'CSV', uris = ['azure://test.blob.core.windows.net/container/sampled*'], skip_leading_rows=1 ) WITH CONNECTION `azure-eastus2.test-connection`
例 3
次の例では、既存のテーブル test_parquet を、自動検出スキーマを使用して sample.parquet という名前のファイルからのデータで上書きします。
LOAD DATA OVERWRITE mydataset.testparquet FROM FILES ( uris = ['s3://test-bucket/sample.parquet'], format = 'PARQUET' ) WITH CONNECTION `aws-us-east-1.test-connection`
データをフィルタする
CREATE TABLE AS SELECT ステートメントと INSERT INTO SELECT ステートメントを使用すると、BigQuery への転送前にデータをフィルタできます。
制限事項
- SELECTクエリの結果が論理バイトで 60 GiB を超えると、クエリは失敗します。テーブルは作成されず、データは転送されません。スキャンされるデータのサイズを小さくする方法については、クエリで処理されるデータを削減するをご覧ください。
- 一時テーブルはサポートされていません。 
- Well-known binary(WKB)の地理空間データ形式の転送はサポートされていません。 
- INSERT INTO SELECTステートメントは、クラスタ化テーブルへのデータ転送をサポートしていません。
- INSERT INTO SELECTステートメントでは、宛先テーブルが- SELECTクエリのソーステーブルと同じ場合、- INSERT INTO SELECTステートメントは宛先テーブル内のどの行も変更しません。BigQuery はリージョン間でデータを読み取ることができないので、宛先テーブルは変更されません。
- CREATE TABLE AS SELECTと- INSERT INTO SELECTは、Amazon S3 または Blob Storage から同じロケーションの BigQuery リージョンにデータを転送する場合にのみサポートされます。詳細については、ロケーションをご覧ください。- 任意の USリージョンからUSマルチリージョンにデータを転送できます。任意のEUリージョンからEUマルチリージョンに転送することもできます。
 
- 任意の 
例
例 1
Amazon S3 からデータを参照する myawsdataset.orders という名前の BigLake テーブルがあるとします。そのテーブルから、米国マルチリージョンの BigQuery テーブル myotherdataset.shipments にデータを転送する必要があります。
まず、myawsdataset.orders テーブルに関する情報を表示します。
bq show myawsdataset.orders;
出力は次のようになります。
  Last modified             Schema              Type     Total URIs   Expiration
----------------- -------------------------- ---------- ------------ -----------
  31 Oct 17:40:28   |- l_orderkey: integer     EXTERNAL   1
                    |- l_partkey: integer
                    |- l_suppkey: integer
                    |- l_linenumber: integer
                    |- l_returnflag: string
                    |- l_linestatus: string
                    |- l_commitdate: date
次に、myotherdataset.shipments テーブルに関する情報を表示します。
bq show myotherdataset.shipments
出力は次のようになります。出力を簡素化するために、一部の列は省略されています。
  Last modified             Schema             Total Rows   Total Bytes   Expiration   Time Partitioning   Clustered Fields   Total Logical
 ----------------- --------------------------- ------------ ------------- ------------ ------------------- ------------------ ---------------
  31 Oct 17:34:31   |- l_orderkey: integer      3086653      210767042                                                         210767042
                    |- l_partkey: integer
                    |- l_suppkey: integer
                    |- l_commitdate: date
                    |- l_shipdate: date
                    |- l_receiptdate: date
                    |- l_shipinstruct: string
                    |- l_shipmode: string
ここで、CREATE TABLE AS SELECT ステートメントを使用して、米国のマルチリージョンにある myotherdataset.orders テーブルにデータを選択的に読み込めます。
CREATE OR REPLACE TABLE myotherdataset.orders PARTITION BY DATE_TRUNC(l_commitdate, YEAR) AS SELECT * FROM myawsdataset.orders WHERE EXTRACT(YEAR FROM l_commitdate) = 1992;
その後、新しく作成されたテーブルとの結合オペレーションを実行できます。
SELECT orders.l_orderkey, orders.l_orderkey, orders.l_suppkey, orders.l_commitdate, orders.l_returnflag, shipments.l_shipmode, shipments.l_shipinstruct FROM myotherdataset.shipments JOIN `myotherdataset.orders` as orders ON orders.l_orderkey = shipments.l_orderkey AND orders.l_partkey = shipments.l_partkey AND orders.l_suppkey = shipments.l_suppkey WHERE orders.l_returnflag = 'R'; -- 'R' means refunded.
新しいデータが利用可能になったら、INSERT INTO SELECT ステートメントを使用して、1993 年のデータを宛先テーブルに追加します。
INSERT INTO myotherdataset.orders SELECT * FROM myawsdataset.orders WHERE EXTRACT(YEAR FROM l_commitdate) = 1993;
例 2
次の例では、取り込み時間パーティション分割テーブルにデータを挿入します。
CREATE TABLE mydataset.orders(id String, numeric_id INT64) PARTITION BY _PARTITIONDATE;
パーティション分割テーブルを作成した後、取り込み時間パーティション分割テーブルにデータを挿入できます。
INSERT INTO mydataset.orders( _PARTITIONTIME, id, numeric_id) SELECT TIMESTAMP("2023-01-01"), id, numeric_id, FROM mydataset.ordersof23 WHERE numeric_id > 4000000;
マテリアライズド ビューのレプリカ
マテリアライズド ビューのレプリカは、外部 Amazon Simple Storage Service(Amazon S3)、Apache Iceberg、Salesforce Data Cloud のデータを BigQuery データセットに複製したもので、そのデータは BigQuery 内でローカルに使用できます。これにより、下り(外向き)データの費用が不要になり、クエリのパフォーマンスも向上します。BigQuery では、Amazon Simple Storage Service(Amazon S3)、Apache Iceberg、Salesforce Data Cloud のデータを基に、BigLake メタデータ キャッシュ対応テーブルに対するマテリアライズド ビューを作成できます。
マテリアライズド ビューのレプリカを使用すると、下り(外向き)データの料金なしで Amazon S3、Iceberg、Data Cloud のマテリアライズド ビューのデータをクエリで使用できるようになり、クエリのパフォーマンスも向上します。これは、サポートされている BigQuery リージョンのデータセットに Amazon S3、Iceberg、Data Cloud のデータを複製し、そのデータを BigQuery 内でローカルに使用可能にすることによって実現されています。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- このセクションのタスクを実行するために必要な Identity and Access Management(IAM)権限が付与されていることを確認します。
- 
                  bigquery.tables.create
- 
                  bigquery.tables.get
- 
                  bigquery.tables.getData
- 
                  bigquery.tables.replicateData
- 
                  bigquery.jobs.create
- Amazon S3 をサポートするリージョンにデータセットを作成します。
- 前の手順で作成したデータセットにソーステーブルを作成します。ソーステーブルは、次のいずれかのテーブルタイプにできます。
- メタデータ キャッシュが有効で、Iceberg ファイル形式を使用しない Amazon S3 BigLake テーブル。
- Apache Iceberg 外部テーブル。
- Data Cloud テーブル。
 
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- 左側のペインで、 [エクスプローラ] をクリックします。  - 左側のペインが表示されていない場合は、 左側のペインを開くをクリックしてペインを開きます。 
- [エクスプローラ] ペインで、マテリアライズド ビュー レプリカを作成するプロジェクトとデータセットに移動し、 (アクション)> [テーブルを作成] をクリックします。 
- [テーブルの作成] ダイアログの [ソース] セクションで、次の操作を行います。 - [テーブルの作成元] で [既存のテーブル / ビュー] を選択します。
- [プロジェクト] に、ソーステーブルまたはビューが存在するプロジェクトを入力します。
- [データセット] に、ソーステーブルまたはビューが存在するデータセットを入力します。
- [ビュー] に、複製するソーステーブルまたはビューを入力します。ビューを選択する場合は、承認済みビューである必要があります。そうでない場合は、そのビューの生成に使用されるすべてのテーブルがビューのデータセットに存在している必要があります。
 
- 省略可: [ローカル マテリアライズド ビューの最大未更新] に、ローカル マテリアライズド ビューの - max_staleness値を入力します。
- [テーブルを作成] ダイアログの [宛先] セクションで、次の操作を行います。 - [プロジェクト] に、マテリアライズド ビューのレプリカを作成するプロジェクトを入力します。
- [データセット] に、マテリアライズド ビューのレプリカを作成するデータセットを入力します。
- [レプリカのマテリアライズド ビューの名前] に、レプリカの名前を入力します。
 
- 省略可: マテリアライズド ビューのレプリカのタグと詳細オプションを指定します。[ローカル マテリアライズド ビュー データセット] にデータセットを指定しない場合、ソースデータと同じプロジェクトとリージョンに自動的に作成され、 - bq_auto_generated_local_mv_datasetという名前が付けられます。[レプリカのマテリアライズド ビューの名前] に名前を指定しない場合、ソースデータと同じプロジェクトとリージョンに自動的に作成され、接頭辞- bq_auto_generated_local_mv_が付けられます。
- [テーブルを作成] をクリックします。 
- 作成したデータセットのベーステーブルにマテリアライズド ビューを作成します。Amazon S3 リージョンにある別のデータセットにマテリアライズド ビューを作成することもできます。
- マテリアライズド ビューを作成したクエリで使用したソーステーブルを含むデータセットで、マテリアライズド ビューを承認します。
- ソーステーブルに対してメタデータ キャッシュの手動更新を構成した場合は、BQ.REFRESH_EXTERNAL_METADATA_CACHEシステム プロシージャを実行してメタデータ キャッシュを更新します。
- BQ.REFRESH_MATERIALIZED_VIEWシステム プロシージャを実行して、マテリアライズド ビューを更新します。
- CREATE MATERIALIZED VIEW AS REPLICA OFステートメントを使用してマテリアライズド ビューのレプリカを作成します。- CREATE MATERIALIZED VIEW PROJECT_ID.BQ_DATASET.REPLICA_NAME OPTIONS(replication_interval_seconds=REPLICATION_INTERVAL) AS REPLICA OF PROJECT_ID.S3_DATASET.MATERIALIZED_VIEW_NAME; - 次のように置き換えます。 - PROJECT_ID: マテリアライズド ビューのレプリカを作成するプロジェクトの名前(例:- myproject)。
- BQ_DATASET: マテリアライズド ビューのレプリカを作成する BigQuery データセットの名前(例:- bq_dataset)。データセットは、ソースのマテリアライズド ビューのリージョンに対応する BigQuery リージョンに存在する必要があります。
- REPLICA_NAME: 作成するマテリアライズド ビュー レプリカの名前(例:- my_mv_replica)。
- REPLICATION_INTERVAL: ソースのマテリアライズド ビューからレプリカにデータを複製する頻度を秒単位で指定します。60~3,600 の値にする必要があります。デフォルトは 300(5 分)です。
- S3_DATASET: ソースのマテリアライズド ビューを含むデータセットの名前(例:- s3_dataset)。
- MATERIALIZED_VIEW_NAME: 複製するマテリアライズド ビューの名前(例:- my_mv)。
 - 次の例では、 - bq_datasetに- mv_replicaというマテリアライズド ビュー レプリカが作成されます。- CREATE MATERIALIZED VIEW `myproject.bq_dataset.mv_replica` OPTIONS( replication_interval_seconds=600 ) AS REPLICA OF `myproject.s3_dataset.my_s3_mv` 
- マテリアライズド ビューのレプリカの更新頻度については、マテリアライズド ビューのレプリカの [詳細] ペインで [最終更新日] フィールドを確認します。
- ソース マテリアライズド ビューの更新頻度については、マテリアライズド ビューの [詳細] ペインで [最終更新日] フィールドを確認します。
- Amazon S3、Iceberg、Data Cloud テーブルのメタデータ キャッシュの更新頻度については、マテリアライズド ビューの [詳細] ペインで [最大未更新] フィールドを確認します。
- northamerica-northeast1
- northamerica-northeast2
- us-central1
- us-east1
- us-east4
- us-east5
- us-south1
- us-west1
- us-west2
- us-west3
- us-west4
- northamerica-northeast1
- northamerica-northeast2
- us-central1
- us-east1
- us-east4
- us-east5
- us-south1
- us-west1
- us-west2
- us-west3
- us-west4
- europe-central2
- europe-north1
- europe-southwest1
- europe-west1
- europe-west2
- europe-west3
- europe-west4
- europe-west6
- europe-west8
- europe-west9
- europe-west10
- asia-east1
- asia-east2
- asia-northeast1
- asia-northeast2
- asia-northeast3
- asia-south1
- asia-south2
- asia-southeast1
- australia-southeast1
- australia-southeast2
- 行レベルのセキュリティまたは列レベルのセキュリティを使用するテーブルに基づくマテリアライズド ビューに対して、マテリアライズド ビューのレプリカは作成できません。
- ソース マテリアライズド ビューまたはマテリアライズド ビューのレプリカで顧客管理の暗号鍵(CMEK)を使用することはできません。
- マテリアライズド ビューのレプリカは、メタデータ キャッシュを使用するテーブルに基づくマテリアライズド ビューに対してのみ作成できます。
- 特定のソース マテリアライズド ビューに対して作成できるマテリアライズド ビューのレプリカは 1 つだけです。
- マテリアライズド ビューのレプリカは、承認済みのマテリアライズド ビューに対してのみ作成できます。
- BigQuery ML について学習する。
- BigQuery Omni について確認する。
- クエリの実行方法を学習する。
- BigQuery Omni の VPC Service Controls の設定方法を確認する。
- Amazon S3 から BigQuery へ、およびBlob Storage から BigQuery への定期的な読み込みジョブをスケジュールして管理する方法を学習する。
必要なロール
    
      このセクションのタスクの実行に必要な権限を取得するには、BigQuery 管理者(roles/bigquery.admin)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
この事前定義ロールには、このセクションのタスクを実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
このセクションのタスクを実行するには、次の権限が必要です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
BigQuery IAM の詳細については、BigQuery の IAM ロールと権限をご覧ください。
マテリアライズド ビューのレプリカ用にデータセットを準備する
マテリアライズド ビューのレプリカを作成するには、事前に次のタスクを完了する必要があります。
マテリアライズド ビューのレプリカを作成する
次のオプションのいずれかを選択します。
コンソール
新しいローカル マテリアライズド ビューが作成され(指定されていない場合)、ソース データセットで承認されます。その後、宛先データセットにマテリアライズド ビューのレプリカが作成されます。
SQL
マテリアライズド ビューのレプリカを作成すると、レプリケーション プロセスでソースのマテリアライズド ビューに対して変更がポーリングされ、データがマテリアライズド ビューのレプリカに複製されます。データは replication_interval_seconds または max_staleness オプションで指定した間隔で更新されます。最初のバックフィルが完了する前にレプリカに対してクエリを実行すると、backfill in progress エラーが発生します。最初のレプリケーションの完了後、マテリアライズド ビューのレプリカのデータをクエリできるようになります。
データの鮮度
マテリアライズド ビューのレプリカを作成すると、レプリケーション プロセスはソースのマテリアライズド ビューへの変更をポーリングし、データをマテリアライズド ビューのレプリカに複製します。データは、CREATE MATERIALIZED VIEW AS REPLICA OF ステートメントの replication_interval_seconds オプションで指定した間隔で複製されます。
マテリアライズド ビューのレプリカデータの更新頻度は、レプリケーション間隔に加えて、ソース マテリアライズド ビューの更新頻度と、マテリアライズド ビューの更新に使用される Amazon S3、Iceberg、Data Cloud テーブルのメタデータ キャッシュの更新頻度にも影響されます。
マテリアライズド ビューのレプリカのデータの更新頻度と、マテリアライズド ビューのベースとなっているリソースは、以下のように Google Cloud コンソールを使用して確認できます。
マテリアライズド ビューのレプリカがサポートされているリージョン
マテリアライズド ビューのレプリカを作成する場合は、次の表のロケーション マッピングを使用します。
| ソース マテリアライズド ビューのロケーション | マテリアライズド ビューのレプリカのロケーション | 
|---|---|
| aws-us-east-1 | USマルチリージョン、または次のいずれかのリージョン。 | 
| aws-us-west-2 | USマルチリージョン、または次のいずれかのリージョン。 | 
| aws-eu-west-1 | EUマルチリージョン、または次のいずれかのリージョン。 | 
| aws-ap-northeast-2 | 次のいずれかのリージョン: | 
| aws-ap-southeast-2 | 次のいずれかのリージョン: | 
マテリアライズド ビューのレプリカの制限事項
マテリアライズド ビューのレプリカの料金
マテリアライズド ビューのレプリカを使用すると、コンピューティング、アウトバウンド データ転送、ストレージの費用が発生します。