データのバッチ読み込み

BigQuery には、Cloud Storage またはローカル ファイルからバッチ オペレーションとしてデータを読み込むことができます。ソースデータは次のいずれかの形式になります。

  • Avro
  • カンマ区切り値(CSV)
  • JSON(改行区切り)
  • ORC
  • Parquet
  • Cloud Storage に保存されている Firestore のエクスポート

BigQuery Data Transfer Service を使用して、Cloud Storage から BigQuery への定期的な読み込みを設定することもできます。

使ってみる

Google Cloud を初めて使用される方は、アカウントを作成して、実際のシナリオでの BigQuery のパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。

BigQuery の無料トライアル

始める前に

このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。

必要な権限

BigQuery にデータを読み込むには、読み込みジョブを実行してデータを BigQuery のテーブルとパーティションに読み込む IAM 権限が必要です。Cloud Storage からデータを読み込む場合は、データを含むバケットに対する IAM アクセス権限も必要です。

BigQuery にデータを読み込む権限

新しい BigQuery テーブルやパーティションにデータを読み込む場合、または既存のテーブルやパーティションにデータの追加や上書きを行う場合は、次の IAM 権限が必要です。

  • bigquery.tables.create
  • bigquery.tables.updateData
  • bigquery.tables.update
  • bigquery.jobs.create

以下の各事前定義 IAM ロールには、BigQuery テーブルやパーティションにデータを読み込むために必要な権限が含まれています。

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.adminbigquery.jobs.create 権限を含む)
  • bigquery.userbigquery.jobs.create 権限を含む)
  • bigquery.jobUserbigquery.jobs.create 権限を含む)

また、bigquery.datasets.create 権限がある場合は、作成するデータセットで読み込みジョブを使用してテーブルの作成と更新を行えます。

BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。

Cloud Storage からデータを読み込む権限

Cloud Storage バケットからデータを読み込むには、次の IAM 権限が必要です。

IAM 事前定義ロール roles/storage.objectViewer には、Cloud Storage バケットからデータを読み込むために必要なすべての権限が含まれています。

Cloud Storage からのデータの読み込み

BigQuery では以下の Cloud Storage ストレージ クラスからデータを読み込むことができます。

  • Standard
  • Nearline
  • Coldline
  • アーカイブ

BigQuery にデータを読み込む方法については、以下のデータ形式のページをご覧ください。

Cloud Storage から BigQuery への定期的な読み込みを構成する方法については、Cloud Storage の転送をご覧ください。

ロケーションに関する留意事項

データのロケーションを選択するときは、次の点を考慮してください。

  • データを読み込むには、Cloud Storage バケットを同じリージョンに配置する
    • BigQuery データセットがマルチリージョンにある場合、読み込み対象のデータが含まれている Cloud Storage バケットは、同じマルチリージョンまたはマルチリージョンに含まれるロケーションに存在する必要があります。たとえば、BigQuery データセットが「EU」マルチリージョンにある場合、Cloud Storage バケットは EU 内の「europe-west1」ベルギー リージョンに配置できます。
    • データセットがリージョンにある場合、Cloud Storage バケットは同じリージョンに存在する必要があります。たとえば、データセットが「asia-northeast1」東京リージョンにある場合、Cloud Storage バケットを「ASIA」マルチリージョンに配置することはできません。
    • 例外: データセットが「US」マルチリージョンにある場合は、任意のロケーションの Cloud Storage バケットからデータを読み込むことができます。
  • データ管理計画を作成する
    • BigQuery データセットや Cloud Storage バケットなどのリージョン ストレージ リソースを選択する場合は、データの地理的管理を行うための計画を作成します。

Cloud Storage のロケーションの詳細については、Cloud Storage ドキュメントのバケットのロケーションをご覧ください。

データセットの作成後にそのロケーションを変更することはできませんが、データセットのコピーを作成できます。また、手動で移動することもできます。詳細については、次をご覧ください。

Cloud Storage URI の取得

Cloud Storage データソースからデータを読み込むには、Cloud Storage URI を指定する必要があります。

Cloud Storage URI は、バケット名とオブジェクト(ファイル名)で構成されます。たとえば、Cloud Storage バケットの名前が mybucket でデータファイルの名前が myfile.csv の場合、バケットの URI は gs://mybucket/myfile.csv になります。データが複数のファイルに分かれている場合は、URI にワイルドカードを使用できます。詳細については、Cloud Storage のリクエスト URI をご覧ください。

BigQuery は、最初のダブル スラッシュ以降に複数の連続スラッシュが含まれるソース URI をサポートしていません。Cloud Storage では、オブジェクト名に複数の連続スラッシュ("/")文字を含めることができます。一方、BigQuery では、複数の連続スラッシュは単一のスラッシュに変換されます。たとえば、gs://bucket/my//object//name というソース URI は Cloud Storage では有効ですが、BigQuery では機能しません。

Cloud Storage URI を取得するには:

  1. Cloud Storage Console を開きます。

    Cloud Storage Console

  2. ソースデータを含むオブジェクト(ファイル)の場所に移動します。

  3. Cloud Storage Console の上部に、オブジェクトのパスが表示されます。URI を作成するには、gs://bucket/file を適切なパス(例: gs://mybucket/myfile.json)に置き換えます。bucket は Cloud Storage バケット名で、file はデータを含むオブジェクト(ファイル)の名前です。

Cloud Storage の URI でのワイルドカードの使用

Cloud Storage データを分割し、共通のベース名を持つ複数のファイルに保存した場合、そのデータを読み込むときに URI でワイルドカードを使用できます。

Cloud Storage の URI にワイルドカードを追加するには、ベース名にアスタリスク(*)を追加します。

例:

  • 次のワイルドカード URI は、接頭辞 gs://mybucket/fed-samples/fed-sample で始まるすべてのフォルダ内のすべてのファイルを選択します。

    gs://mybucket/fed-samples/fed-sample*
    
  • 次のワイルドカード URI は、fed-samples というフォルダと fed-samples のサブフォルダにある .csv 拡張子を持つファイルのみを選択します。

    gs://mybucket/fed-samples/fed-sample/*.csv
    
  • 次のワイルドカード URI は、fed-samples という名前のフォルダで、fed-sample*.csv という命名パターンのファイルを選択します。この例では、fed-samples のサブフォルダ内のファイルは選択されません。

    gs://mybucket/fed-samples/fed-sample*.csv
    

一部のプラットフォームでは、bq コマンドライン ツールの使用時に、アスタリスクをエスケープしなければならない場合があります。

バケット内のオブジェクト(ファイル名)について使用できるワイルドカードは 1 つのみです。ワイルドカードは、オブジェクト名の中や末尾に使用できます。バケット名にワイルドカードを付けることはできません。ソース URI では複数のワイルドカードを使用できません。たとえば、パス gs://mybucket/fed-*/temp/*.csv は無効です。

Google Datastore のエクスポートで指定できる URI は 1 つのみです。また、URI の末尾は .backup_info または .export_metadata である必要があります。

以下の場合、ワイルドカード文字(アスタリスク)は使用できません。

  • Datastore または Firestore のエクスポートにリンクされる外部テーブルを作成する。
  • Cloud Storage から Datastore または Firestore のエクスポート データを読み込む。

制限事項

Cloud Storage バケットから BigQuery にデータを読み込む際には、次の制限があります。

  • データセットのロケーションが US マルチリージョン以外の値に設定されている場合、Cloud Storage バケットはデータセットと同じロケーションに存在する必要があります。
  • BigQuery では外部データソースに対して整合性が保証されません。クエリの実行中に基になるデータを変更すると、予期しない動作が発生する可能性があります。
  • BigQuery では、Cloud Storage オブジェクトのバージョニングはサポートされていません。Cloud Storage URI に世代番号を含めると、読み込みジョブは失敗します。

Cloud Storage のソースデータの形式によっては、追加の制限が適用される場合があります。詳細については、次をご覧ください。

ローカル ファイルからのデータの読み込み

次のいずれかを使用して、読み取り可能なデータソース(ローカルマシンなど)からデータを読み込むことができます。

  • Google Cloud Console
  • bq コマンドライン ツールの bq load コマンド
  • API
  • クライアント ライブラリ

Cloud Console または bq コマンドライン ツールを使用してデータを読み込むと、読み込みジョブが自動的に作成されます。

データをローカル データソースから読み込むには:

Console

  1. Cloud Console で [BigQuery] ページを開きます。

    BigQuery ページに移動

  2. ナビゲーション パネルの [リソース] セクションで、Google Cloud プロジェクトを展開し、データセットを選択します。

  3. ウィンドウの右側の詳細パネルで、[テーブルを作成] をクリックします。データを読み込むプロセスは、空のテーブルを作成するプロセスと同じです。

  4. [テーブルの作成] ページの [ソース] セクションで、次の操作を行います。

    • [テーブルの作成元] で [アップロード] を選択します。

      テーブルのアップロード

    • [ファイルを選択] の下の [参照] をクリックします。

      ファイルの参照

    • 一覧からファイルを選択して [開く] をクリックします。ワイルドカードやカンマ区切りのリストは、ローカル ファイルに対してはサポートされないことに注意してください。

    • ファイル形式として、CSVJSON(改行区切り)AvroParquet または ORC を選択します。

  5. [テーブルを作成] ページの [送信先] セクションで、次の操作を行います。

    • [データセット名] で、該当するデータセットを選択します。

      データセットを表示

    • [テーブル名] に、BigQuery で作成するテーブルの名前を入力します。

    • [テーブルタイプ] が [ネイティブ テーブル] に設定されていることを確認します。

  6. [スキーマ] セクションでスキーマ定義を入力します。

    • CSV や JSON ファイルの場合は、自動検出オプションをオンにしてスキーマの自動検出を有効にできます。スキーマ情報は、サポートされているその他のファイル形式のソースデータで自己記述されます。

    • 次の方法でスキーマ情報を手動で入力することもできます。

      • [テキストとして編集] をクリックし、テーブル スキーマを JSON 配列として入力します。

      • [フィールドを追加] を使用して、スキーマを手動で入力します。

  7. [詳細オプション] セクションで該当する項目を選択します。使用可能なオプションについては、CSV のオプションJSON のオプションをご覧ください。

  8. 省略可: [詳細オプション] で書き込み処理を選択します。

    • 空の場合に書き込む: テーブルが空の場合にのみデータを書き込みます。
    • テーブルに追加する: テーブルの末尾にデータを追加します。これがデフォルトの設定です。
    • テーブルを上書きする: 新しいデータを書き込む前に、テーブル内の既存のデータをすべて削除します。
  9. [テーブルを作成] をクリックします。

bq

bq load コマンドを使用して source_format を指定し、ローカル ファイルへのパスも指定します。

(省略可)--location フラグを指定して、その値をロケーションに設定します。

デフォルト プロジェクト以外のプロジェクトのデータを読み込む場合は、PROJECT_ID:DATASET の形式でプロジェクト ID をデータセットに追加します。

bq --location=LOCATION load \
--source_format=FORMAT \
PROJECT_ID:DATASET.TABLE \
PATH_TO_SOURCE \
SCHEMA

次のように置き換えます。

  • LOCATION: ロケーション。--location フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。ロケーションのデフォルト値は、.bigqueryrc ファイルを使用して設定できます。
  • FORMAT: CSVAVROPARQUETORCNEWLINE_DELIMITED_JSON
  • project_id: プロジェクト ID。
  • dataset: 既存のデータセット。
  • table: データの読み込み先のテーブル名。
  • path_to_source: ローカル ファイルへのパス。
  • schema: 有効なスキーマ。スキーマはローカルの JSON ファイルにすることも、コマンドの一部としてインラインで入力することもできます。また、スキーマ定義を指定する代わりに、--autodetect フラグを使用することもできます。

その他にも、BigQuery によるデータの解析方法を制御するオプションに対応するフラグを追加できます。たとえば、--skip_leading_rows フラグを使用すると、CSV ファイル内のヘッダー行が無視されます。詳細については、CSV のオプションJSON のオプションをご覧ください。

例:

次のコマンドは、ローカルの改行区切りの JSON ファイル(mydata.json)をデフォルト プロジェクトの mydataset 内にある mytable というテーブルに読み込みます。スキーマは、myschema.json という名前のローカル スキーマ ファイルで定義されています。

    bq load \
    --source_format=NEWLINE_DELIMITED_JSON \
    mydataset.mytable \
    ./mydata.json \
    ./myschema.json

次のコマンドは、ローカルの CSV ファイル(mydata.csv)を myotherprojectmydataset 内にある mytable という名テーブルに読み込みます。スキーマは、FIELD:DATA_TYPE, FIELD:DATA_TYPE の形式でインラインで定義されます。

    bq load \
    --source_format=CSV \
    myotherproject:mydataset.mytable \
    ./mydata.csv \
    qtr:STRING,sales:FLOAT,year:STRING

次のコマンドは、ローカルの CSV ファイル(mydata.csv)をデフォルト プロジェクトの mydataset 内にある mytable というテーブルに読み込みます。スキーマはスキーマ自動検出を使用して定義されます。

    bq load \
    --autodetect \
    --source_format=CSV \
    mydataset.mytable \
    ./mydata.csv

C#

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用にある C# の設定手順を行ってください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。

次のコードは、ローカル CSV ファイルを新しい BigQuery テーブルに読み込む方法を示しています。別の形式のローカル ファイルを読み込むには、UploadCsvOptions の代わりに、JobCreationOptions 基本クラスから適切な形式のアップデート オプション クラスを選択します。


using Google.Cloud.BigQuery.V2;
using System;
using System.IO;

public class BigQueryLoadFromFile
{
    public void LoadFromFile(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id",
        string filePath = "path/to/file.csv"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Create job configuration
        var uploadCsvOptions = new UploadCsvOptions()
        {
            SkipLeadingRows = 1,  // Skips the file headers
            Autodetect = true
        };
        using (FileStream stream = File.Open(filePath, FileMode.Open))
        {
            // Create and run job
            // Note that there are methods available for formats other than CSV
            BigQueryJob job = client.UploadCsv(
                datasetId, tableId, null, stream, uploadCsvOptions);
            job.PollUntilCompleted();  // Waits for the job to complete.
            // Display the number of rows uploaded
            BigQueryTable table = client.GetTable(datasetId, tableId);
            Console.WriteLine(
                $"Loaded {table.Resource.NumRows} rows to {table.FullyQualifiedId}");
        }
    }
}

Go

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の手順に沿って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

次のコードは、ローカル CSV ファイルを新しい BigQuery テーブルに読み込む方法を示しています。別の形式のローカル ファイルを読み込むには、NewReaderSourceDataFormat プロパティを適切な形式に設定します。

import (
	"context"
	"fmt"
	"os"

	"cloud.google.com/go/bigquery"
)

// importCSVFromFile demonstrates loading data into a BigQuery table using a file on the local filesystem.
func importCSVFromFile(projectID, datasetID, tableID, filename string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	f, err := os.Open(filename)
	if err != nil {
		return err
	}
	source := bigquery.NewReaderSource(f)
	source.AutoDetect = true   // Allow BigQuery to determine schema.
	source.SkipLeadingRows = 1 // CSV has a single header line.

	loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(source)

	job, err := loader.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

Java

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用にある Java の設定手順を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

次のコードは、ローカル CSV ファイルを新しい BigQuery テーブルに読み込む方法を示しています。別の形式のローカル ファイルを読み込むには、FormatOptions を該当の形式に設定します。

TableId tableId = TableId.of(datasetName, tableName);
WriteChannelConfiguration writeChannelConfiguration =
    WriteChannelConfiguration.newBuilder(tableId).setFormatOptions(FormatOptions.csv()).build();
// The location must be specified; other fields can be auto-detected.
JobId jobId = JobId.newBuilder().setLocation(location).build();
TableDataWriteChannel writer = bigquery.writer(jobId, writeChannelConfiguration);
// Write data to writer
try (OutputStream stream = Channels.newOutputStream(writer)) {
  Files.copy(csvPath, stream);
}
// Get load job
Job job = writer.getJob();
job = job.waitFor();
LoadStatistics stats = job.getStatistics();
return stats.getOutputRows();

Node.js

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Node.js の手順に沿って設定を行ってください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。

次のコードは、ローカル CSV ファイルを新しい BigQuery テーブルに読み込む方法を示しています。別の形式のローカル ファイルを読み込むには、load 関数の metadata パラメータを適切な形式に設定します。

// Imports the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function loadLocalFile() {
  // Imports a local file into a table.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const filename = '/path/to/file.csv';
  // const datasetId = 'my_dataset';
  // const tableId = 'my_table';

  // Load data from a local file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(filename);

  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

PHP

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用にある PHP の設定手順を行ってください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。

次のコードは、ローカル CSV ファイルを新しい BigQuery テーブルに読み込む方法を示しています。別の形式のローカル ファイルを読み込むには、sourceFormat を該当の形式に設定します。

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId  = 'The Google project ID';
// $datasetId  = 'The BigQuery dataset ID';
// $tableId    = 'The BigQuery table ID';
// $source     = 'The path to the CSV source file to import';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
// create the import job
$loadConfig = $table->load(fopen($source, 'r'))->sourceFormat('CSV');

$job = $table->runJob($loadConfig);
// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    printf('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Data imported successfully' . PHP_EOL);
}

Python

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用にある Python の設定手順を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

次のコードは、ローカル CSV ファイルを新しい BigQuery テーブルに読み込む方法を示しています。別の形式のローカル ファイルを読み込むには、LoadJobConfig.source_format プロパティを適切な形式に設定します。

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to create.
# table_id = "your-project.your_dataset.your_table_name"

job_config = bigquery.LoadJobConfig(
    source_format=bigquery.SourceFormat.CSV, skip_leading_rows=1, autodetect=True,
)

with open(file_path, "rb") as source_file:
    job = client.load_table_from_file(source_file, table_id, job_config=job_config)

job.result()  # Waits for the job to complete.

table = client.get_table(table_id)  # Make an API request.
print(
    "Loaded {} rows and {} columns to {}".format(
        table.num_rows, len(table.schema), table_id
    )
)

Ruby

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用にある Ruby の設定手順を行ってください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。

次のコードは、ローカル CSV ファイルを新しい BigQuery テーブルに読み込む方法を示しています。別の形式のローカル ファイルを読み込むには、Table#load_job メソッドの format パラメータを適切な形式に設定します。

require "google/cloud/bigquery"

def load_from_file dataset_id = "your_dataset_id",
                   file_path  = "path/to/file.csv"

  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table_id = "new_table_id"

  # Infer the config.location based on the location of the referenced dataset.
  load_job = dataset.load_job table_id, file_path do |config|
    config.skip_leading = 1
    config.autodetect   = true
  end
  load_job.wait_until_done! # Waits for table load to complete.

  table = dataset.table table_id
  puts "Loaded #{table.rows_count} rows into #{table.id}"
end

制限事項

ローカル データソースからのデータの読み込みには、次の制限があります。

  • ワイルドカードやカンマ区切りのリストは、ローカル データソースからファイルを読み込む場合にはサポートされません。ファイルは個別に読み込む必要があります。
  • Cloud Console を使用する場合、ローカル データソースから読み込まれるファイルのサイズが 10 MB を超えないようにしてください。サイズの大きいファイルの場合は、Cloud Storage からファイルを読み込みます。

圧縮データと非圧縮データを読み込む

Avro バイナリ形式は、圧縮データと非圧縮データの両方の読み込みに適しています。データブロックが圧縮されていても、Avro データは並行して読み取ることができるため、より高速に読み込みが行われます。圧縮 Avro ファイルはサポート対象外ですが、圧縮データブロックはサポートされています。Avro 圧縮をご覧ください。

Parquet の効率的な列単位のエンコードでは通常、圧縮率が高くなり、ファイルサイズが小さくなるため、Parquet バイナリ形式も適しています。Parquet ファイルは、ファイルの並列読み込みが可能な圧縮手法も使用します。圧縮 Parquet ファイルはサポート対象外ですが、圧縮データブロックはサポートされています。Parquet 圧縮をご覧ください。

ORC バイナリ形式には、Parquet 形式に似た利点があります。データ ストライプを並列で読み取ることができるため、ORC ファイルのデータは高速で読み取ることができます。各データ ストライプの行が順番に読み込まれます。読み込み時間を短縮するには、データ ストライプのサイズを 256 MB 以下にします。圧縮 ORC ファイルはサポート対象外ですが、圧縮ファイルのフッターとストライプはサポートされています。ORC 圧縮をご覧ください。

CSV や JSON などのデータ形式の場合、BigQuery では非圧縮ファイルを並列読み取りできるため、非圧縮ファイルを圧縮ファイルよりかなり速く読み込むことができます。ただし、非圧縮ファイルはサイズが大きいため、使用すると帯域幅の制限に達し、BigQuery に読み込まれる前に Cloud Storage にステージングされるデータのために Cloud Storage のコストが高くなる可能性があります。圧縮ファイルや非圧縮ファイルの場合、行の順序が保証されないことにもご注意ください。使用状況に応じて、どちらを重視するかを決定する必要があります。

一般に、帯域幅が限られている場合は、CSV ファイルや JSON ファイルを gzip で圧縮してから Cloud Storage にアップロードします。現在のところ、BigQuery にデータを読み込む CSV ファイルと JSON ファイルに対してサポートされているファイル圧縮形式は gzip のみです。読み込み速度が重要なアプリを使用していて、データの読み込み用に豊富な帯域幅がある場合は、ファイルを圧縮しないでおきます。

テーブルへの追加または上書き

テーブルに追加のデータを読み込むには、ソースファイルを使用するか、クエリ結果を追加します。データのスキーマが追加先のテーブルまたはパーティションのスキーマと一致しない場合は、追加または上書きするときにスキーマを更新できます。

データの追加時にスキーマを更新する場合、BigQuery では次のことが可能です。

  • 新しいフィールドを追加する
  • フィールドのモードを REQUIRED から NULLABLE に緩和する

テーブルを上書きする場合、スキーマは必ず上書きされます。テーブルを上書きするとき、スキーマの更新は制限されません。

Cloud Console では、[書き込み設定] オプションを使用して、ソースファイルやクエリ結果からデータを読み込むときに行う操作を指定します。bq コマンドライン ツールと API には、次のオプションがあります。

Console のオプション bq ツールのフラグ BigQuery API のプロパティ 説明
Write if empty なし WRITE_EMPTY テーブルが空の場合にのみデータを書き込みます。
テーブルに追加する --noreplace または --replace=false--replace を指定しない場合、デフォルトは追加) WRITE_APPEND (デフォルト)テーブルの末尾にデータを追加します。
テーブルを上書きする --replace または --replace=true WRITE_TRUNCATE 新しいデータを書き込む前に、テーブル内の既存のデータをすべて消去します。

割り当てポリシー

データのバッチ読み込みの割り当てポリシーについては、割り当てと上限のページの読み込みジョブをご覧ください。

料金

BigQuery へのデータの一括読み込みは無料です。詳しくは、BigQuery データ取り込みの料金をご覧ください。