クロスクラウド オペレーションでデータを読み込む

BigQuery 管理者またはアナリストは、Amazon Simple Storage Service(Amazon S3)バケットまたは Azure Blob Storage から BigQuery テーブルにデータを読み込むことができます。転送されたデータをGoogle Cloud リージョンに存在するデータと結合し、BigQuery ML などの BigQuery 機能を利用できます。また、特定の外部ソースのマテリアライズド ビューのレプリカを作成して、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

次の例では、自動検出スキーマを使用して、sample.parquet という名前のファイルのデータによって既存のテーブル test_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 SELECTINSERT 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 内でローカルに使用可能にすることによって実現されています。

始める前に

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. このセクションのタスクを実行するために必要な Identity and Access Management(IAM)権限が付与されていることを確認します。
  7. 必要なロール

    このセクションのタスクの実行に必要な権限を取得するには、BigQuery 管理者roles/bigquery.admin)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

    この事前定義ロールには、このセクションのタスクを実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

    必要な権限

    このセクションのタスクを実行するには、次の権限が必要です。

    • bigquery.tables.create
    • bigquery.tables.get
    • bigquery.tables.getData
    • bigquery.tables.replicateData
    • bigquery.jobs.create

    カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

    BigQuery IAM の詳細については、BigQuery の IAM ロールと権限をご覧ください。

    マテリアライズド ビューのレプリカ用にデータセットを準備する

    マテリアライズド ビューのレプリカを作成するには、事前に次のタスクを完了する必要があります。

    1. Amazon S3 をサポートするリージョンデータセットを作成します。
    2. 前の手順で作成したデータセットにソーステーブルを作成します。ソーステーブルは、次のいずれかのテーブルタイプにできます。

    マテリアライズド ビューのレプリカを作成する

    次のオプションのいずれかを選択します。

    コンソール

    1. Google Cloud コンソールで、[BigQuery] ページに移動します。

      [BigQuery] に移動

    2. [エクスプローラ] ペインで、マテリアライズド ビュー レプリカを作成するプロジェクトとデータセットに移動し、(アクションを表示) > [テーブルを作成] をクリックします。

    3. [テーブルの作成] ダイアログの [ソース] セクションで、次の操作を行います。

      1. [テーブルの作成元] で [既存のテーブル / ビュー] を選択します。
      2. [プロジェクト] に、ソーステーブルまたはビューが存在するプロジェクトを入力します。
      3. [データセット] に、ソーステーブルまたはビューが存在するデータセットを入力します。
      4. [ビュー] に、複製するソーステーブルまたはビューを入力します。ビューを選択する場合は、承認済みビューである必要があります。そうでない場合は、そのビューの生成に使用されるすべてのテーブルがビューのデータセットに存在している必要があります。
    4. 省略可: [ローカル マテリアライズド ビューの最大未更新] に、ローカル マテリアライズド ビューの max_stalenessを入力します。

    5. [テーブルを作成] ダイアログの [宛先] セクションで、次の操作を行います。

      1. [プロジェクト] に、マテリアライズド ビューのレプリカを作成するプロジェクトを入力します。
      2. [データセット] に、マテリアライズド ビューのレプリカを作成するデータセットを入力します。
      3. [レプリカのマテリアライズド ビューの名前] に、レプリカの名前を入力します。
    6. 省略可: マテリアライズド ビューのレプリカのタグ詳細オプションを指定します。[ローカル マテリアライズド ビュー データセット] にデータセットを指定しない場合、ソースデータと同じプロジェクトとリージョンに自動的に作成され、bq_auto_generated_local_mv_dataset という名前が付けられます。[レプリカのマテリアライズド ビューの名前] に名前を指定しない場合、ソースデータと同じプロジェクトとリージョンに自動的に作成され、接頭辞 bq_auto_generated_local_mv_ が付けられます。

    7. [テーブルを作成] をクリックします。

    新しいローカル マテリアライズド ビューが作成され(指定されていない場合)、ソース データセットで承認されます。その後、宛先データセットにマテリアライズド ビューのレプリカが作成されます。

    SQL

    1. 作成したデータセットのベーステーブルにマテリアライズド ビューを作成します。Amazon S3 リージョンにある別のデータセットにマテリアライズド ビューを作成することもできます。
    2. マテリアライズド ビューを作成したクエリで使用したソーステーブルを含むデータセットで、マテリアライズド ビューを承認します。
    3. ソーステーブルに対してメタデータ キャッシュの手動更新を構成した場合は、BQ.REFRESH_EXTERNAL_METADATA_CACHE システム プロシージャを実行してメタデータ キャッシュを更新します。
    4. BQ.REFRESH_MATERIALIZED_VIEW システム プロシージャを実行して、マテリアライズド ビューを更新します。
    5. 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_datasetmv_replica というマテリアライズド ビュー レプリカが作成されます。

      CREATE MATERIALIZED VIEW `myproject.bq_dataset.mv_replica`
      OPTIONS(
      replication_interval_seconds=600
      )
      AS REPLICA OF `myproject.s3_dataset.my_s3_mv`

    マテリアライズド ビューのレプリカを作成すると、レプリケーション プロセスでソースのマテリアライズド ビューに対して変更がポーリングされ、データがマテリアライズド ビューのレプリカに複製されます。データは replication_interval_seconds または max_staleness オプションで指定した間隔で更新されます。最初のバックフィルが完了する前にレプリカに対してクエリを実行すると、backfill in progress エラーが発生します。最初のレプリケーションの完了後、マテリアライズド ビューのレプリカのデータをクエリできるようになります。

    データの鮮度

    マテリアライズド ビューのレプリカを作成すると、レプリケーション プロセスはソースのマテリアライズド ビューへの変更をポーリングし、データをマテリアライズド ビューのレプリカに複製します。データは、CREATE MATERIALIZED VIEW AS REPLICA OF ステートメントreplication_interval_seconds オプションで指定した間隔で複製されます。

    マテリアライズド ビューのレプリカデータの更新頻度は、レプリケーション間隔に加えて、ソース マテリアライズド ビューの更新頻度と、マテリアライズド ビューの更新に使用される Amazon S3、Iceberg、Data Cloud テーブルのメタデータ キャッシュの更新頻度にも影響されます。

    マテリアライズド ビューのレプリカのデータの更新頻度と、マテリアライズド ビューのベースとなっているリソースは、以下のように Google Cloud コンソールを使用して確認できます。

    • マテリアライズド ビューのレプリカの更新頻度については、マテリアライズド ビューのレプリカの [詳細] ペインで [最終更新日] フィールドを確認します。
    • ソース マテリアライズド ビューの更新頻度については、マテリアライズド ビューの [詳細] ペインで [最終更新日] フィールドを確認します。
    • Amazon S3、Iceberg、Data Cloud テーブルのメタデータ キャッシュの更新頻度については、マテリアライズド ビューの [詳細] ペインで [最大未更新] フィールドを確認します。

    マテリアライズド ビューのレプリカがサポートされているリージョン

    マテリアライズド ビューのレプリカを作成する場合は、次の表のロケーション マッピングを使用します。

    ソース マテリアライズド ビューのロケーション マテリアライズド ビューのレプリカのロケーション
    aws-us-east-1 US マルチリージョン、または次のいずれかのリージョン
    • northamerica-northeast1
    • northamerica-northeast2
    • us-central1
    • us-east1
    • us-east4
    • us-east5
    • us-south1
    • us-west1
    • us-west2
    • us-west3
    • us-west4
    aws-us-west-2 US マルチリージョン、または次のいずれかのリージョン
    • northamerica-northeast1
    • northamerica-northeast2
    • us-central1
    • us-east1
    • us-east4
    • us-east5
    • us-south1
    • us-west1
    • us-west2
    • us-west3
    • us-west4
    aws-eu-west-1 EU マルチリージョン、または次のいずれかのリージョン
    • europe-central2
    • europe-north1
    • europe-southwest1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
    • europe-west6
    • europe-west8
    • europe-west9
    • europe-west10
    aws-ap-northeast-2 次のいずれかのリージョン:
    • asia-east1
    • asia-east2
    • asia-northeast1
    • asia-northeast2
    • asia-northeast3
    • asia-south1
    • asia-south2
    • asia-southeast1
    aws-ap-southeast-2 次のいずれかのリージョン:
    • australia-southeast1
    • australia-southeast2

    マテリアライズド ビューのレプリカの制限事項

    • 行レベルのセキュリティまたは列レベルのセキュリティを使用するテーブルに基づくマテリアライズド ビューに対して、マテリアライズド ビューのレプリカは作成できません。
    • ソース マテリアライズド ビューまたはマテリアライズド ビューのレプリカで顧客管理の暗号鍵(CMEK)を使用することはできません。
    • マテリアライズド ビューのレプリカは、メタデータ キャッシュを使用するテーブルに基づくマテリアライズド ビューに対してのみ作成できます。
    • 特定のソース マテリアライズド ビューに対して作成できるマテリアライズド ビューのレプリカは 1 つだけです。
    • マテリアライズド ビューのレプリカは、承認済みのマテリアライズド ビューに対してのみ作成できます。

    マテリアライズド ビューのレプリカの料金

    マテリアライズド ビューのレプリカを使用すると、コンピューティング、アウトバウンド データ転送、ストレージの費用が発生します。

    次のステップ