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

Cloud Storage から CSV ファイルを読み込む

Cloud Storage から CSV データを読み込む際は、データを新しいテーブルまたはパーティションに読み込む、データを既存のテーブルまたはパーティションに追加する、または既存のテーブルまたはパーティションを上書きすることが可能です。BigQuery に読み込まれたデータは Capacitor の列型(BigQuery のストレージ形式)に変換されます。

Cloud Storage から BigQuery のテーブルにデータを読み込むとき、読み込み先のテーブルを含むデータセットは Cloud Storage バケットと同じリージョンまたはマルチリージョン ロケーションに存在している必要があります。

ローカル ファイルから CSV データを読み込む方法については、ローカル データソースから BigQuery にデータを読み込むをご覧ください。

制限事項

Cloud Storage から BigQuery に CSV データを読み込む際は、以下の点に注意してください。

  • CSV ファイルはネストされたデータや繰り返しデータに対応していません。
  • gzip 圧縮を使用した場合、BigQuery はデータを並列で読み取ることができません。圧縮された CSV データを BigQuery に読み込む場合は、圧縮されていないデータを読み込むよりも時間がかかります。
  • 同じ読み込みジョブに圧縮ファイルと非圧縮ファイルの両方を含めることはできません。
  • CSV データまたは JSON データを読み込む場合、DATE 列の値に区切りとしてダッシュ(-)を使用し、YYYY-MM-DD(年-月-日)の形式にする必要があります。
  • JSON データまたは CSV データを読み込む場合、TIMESTAMP 列の値の日付部分に区切りとしてダッシュ(-)を使用し、YYYY-MM-DD(年-月-日)の形式にする必要があります。タイムスタンプの時間部分 hh:mm:ss(時-分-秒)は、区切りとしてコロン(:)を使用します。

CSV のエンコード

BigQuery に読み込む CSV データは UTF-8 でエンコードされている必要があります。CSV ファイルに ISO-8859-1(Latin-1 とも呼ばれます)形式でエンコードされたデータが含まれている場合は、それらのデータを UTF-8 に変換できるように、データの読み込み時に明示的にエンコードを指定する必要があります。

CSV ファイルの区切り文字には、ISO-8859-1 の任意の 1 バイト文字を使用できます。128~255 の範囲の文字を使用するには、その文字を UTF-8 としてエンコードする必要があります。BigQuery は文字列を ISO-8859-1 エンコードに変換し、エンコードされた文字列の先頭バイトを使用してデータを生のバイナリ状態で分割します。

必要な権限

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

BigQuery の権限

BigQuery にデータを読み込むには、少なくとも以下の権限が必要です。これらの権限は、データを新しいテーブルまたはパーティションに読み込む場合や、既存のテーブルまたはパーティションに対してデータの追加や上書きを行う場合に必要になります。

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

事前定義された以下の Cloud IAM 役割には、bigquery.tables.create 権限と bigquery.tables.updateData 権限が両方とも含まれています。

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

事前定義された以下の Cloud IAM 役割には bigquery.jobs.create 権限が含まれています。

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

また、bigquery.datasets.create 権限があるユーザーがデータセットを作成すると、作成したデータセットに対する bigquery.dataOwner アクセス権がそのユーザーに付与されます。 bigquery.dataOwner アクセス権により、読み込みジョブを使用してデータセット内のテーブルを作成または更新する権限が付与されます。

BigQuery での Cloud IAM 役割と権限については、アクセス制御をご覧ください。

Cloud Storage の権限

Cloud Storage バケットからデータを読み込むには、storage.objects.get 権限が付与されている必要があります。URI のワイルドカードを使用する場合は storage.objects.list 権限も必要です。

事前定義された Cloud IAM の役割 storage.objectViewer が付与されると、storage.objects.get 権限と storage.objects.list 権限が両方とも与えられます。

CSV データをテーブルに読み込む

CSV データを Cloud Storage から新しい BigQuery テーブルに読み込むには、次の方法を使用します。

  • GCP Console または従来のウェブ UI を使用する
  • CLI の bq load コマンドを使用する
  • jobs.insert API メソッドを呼び出して load ジョブを構成する
  • クライアント ライブラリを使用する

CSV データを Cloud Storage から新しい BigQuery テーブルに読み込むには:

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。
    GCP Console に移動する

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

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

    テーブルを作成

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

    • [テーブルの作成元] で [Cloud Storage] を選択します。

    • ソース フィールドで Cloud Storage URI を参照または入力します。GCP Console で複数の URI を指定することはできませんが、ワイルドカードは使用できます。Cloud Storage バケットは、作成するテーブルを含むデータセットと同じロケーションに存在している必要があります。

      ファイルを選択

    • [ファイル形式] で [CSV] を選択します。

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

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

      データセットを表示

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

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

  6. [スキーマ] セクションの [自動検出] で、[スキーマと入力パラメータ] をオンにしてスキーマの自動検出を有効にします。次の方法でスキーマ定義を手動で入力することもできます。

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

      スキーマを JSON 配列として追加する

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

      [フィールドを追加] ボタンを使用してスキーマ定義を追加する

  7. (省略可)テーブルを分割するには、[パーティションとクラスタの設定] で次のオプションを選択します。

    • パーティション分割テーブルを作成するには、[パーティショニングなし] をクリックして [フィールドにより分割] を選択し、DATE 列または TIMESTAMP 列を選択します。スキーマに DATE 列または TIMESTAMP 列が含まれていない場合、このオプションは使用できません。
    • 取り込み時間パーティション分割テーブルを作成するには、[パーティショニングなし] をクリックして [取り込み時間により分割] を選択します。
  8. (省略可)クエリを実行するパーティションを指定する WHERE 句の使用を必須にするには、[パーティショニング フィルタ] で [パーティション フィルタを要求] ボックスをクリックします。パーティション フィルタを必須にすると、コストが削減され、パフォーマンスが向上する場合があります。詳細については、パーティション分割テーブルのクエリをご覧ください。[パーティショニングなし] を選択している場合、このオプションは使用できません。

  9. (省略可)テーブルをクラスタ化するには、[クラスタリング順序] ボックスに 1〜4 個のフィールド名を入力します。現在、クラスタリングはパーティション分割テーブルに対してのみサポートされています。

  10. (省略可)[詳細オプション] をクリックします。

    • [書き込み設定] で、[空の場合に書き込む] を選択したままにします。これにより、新しいテーブルが作成され、データが読み込まれます。
    • [許可されているエラー数] で、デフォルト値の 0 を使用するか、無視できる最大行数を入力します。エラーを含む行数がこの値を超えると、ジョブは invalid メッセージとなり、失敗します。
    • テーブルのスキーマに存在しない行の値を無視するには、[不明な値] で [不明な値を無視する] をオンにします。
    • [フィールド区切り文字] で、CSV ファイル内のセルの区切り文字を選択します。[カンマ]、[タブ]、[パイプ]、[カスタム] のいずれかを選択します。[カスタム] を選択した場合、[カスタムのフィールド区切り文字] ボックスに区切り文字を入力します。デフォルト値はカンマです。
    • [スキップするヘッダー行] で、CSV ファイルでスキップするヘッダーの行数を入力します。デフォルト値は 0 です。
    • 引用符で囲まれた改行を使用する場合は、[引用符で囲まれた改行を許可する] をオンにして、改行文字を含む引用符で囲まれたデータ セクションを CSV ファイルで許可します。デフォルト値は false です。
    • ジャグ行を使用する場合、[ジャグ行を許可する] をオンにして、CSV ファイルで末尾のオプションの列が欠落している行を許可します。欠損値は null として扱われます。オフの場合、末尾の列が欠落しているレコードは不良レコードとして処理され、不良レコードが多すぎる場合はジョブの結果内で無効なエラーが返されます。デフォルト値は false です。
    • Cloud Key Management Service 鍵を使用するには、[暗号化] で [顧客管理の暗号鍵] をクリックします。[Google が管理する鍵] の設定をそのままにすると、BigQuery は保存されているデータを暗号化します
  11. [テーブルを作成] をクリックします。

従来の UI

  1. BigQuery ウェブ UI に移動します。
    BigQuery ウェブ UI に移動

  2. ナビゲーション パネルで、データセットにカーソルを合わせて下矢印アイコン 下矢印アイコン画像 をクリックし、[Create new table] をクリックします。データを読み込むプロセスは、空のテーブルを作成するプロセスと同じです。

  3. [Create Table] ページの [Source Data] セクションで、次の操作を行います。

    • [Create from source] をクリックします。
    • [Location] で [Cloud Storage] を選択し、ソース フィールドに Cloud Storage URI を入力します。BigQuery ウェブ UI では URI の複数指定はできませんが、ワイルドカードはサポートされています。Cloud Storage バケットは、作成するテーブルを含むデータセットと同じロケーションに存在している必要があります。
    • [File format] で [CSV] を選択します。
  4. [Destination Table] セクションで、次の操作を行います。

    • [Table name] で適切なデータセットを選択し、BigQuery で作成するテーブルの名前をテーブル名のフィールドに入力します。
    • [Table type] が [Native table] に設定されていることを確認します。
  5. [Schema] セクションの [Auto detect] で、[Schema and input parameters] をオンにしてスキーマの自動検出を有効にします。次の方法でスキーマ定義を手動で入力することもできます。

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

      スキーマを JSON 配列として追加する

    • [Add Field] を使用して、スキーマを手動で入力します。

      追加フィールドを使用してスキーマを追加する

  6. (省略可)[Options] セクションで、次の操作を行います。

    • [Field delimiter] で、CSV ファイル内のセルの区切り文字を選択します。[Comma]、[Tab]、[Pipe]、[Other] のいずれかを選択します。[Other] を選択した場合、[Custom field delimiter] ボックスに区切り文字を入力します。デフォルト値は Comma です。
    • [Header rows to skip] で、CSV ファイルでスキップするヘッダーの行数を入力します。デフォルト値は 0 です。
    • [Number of errors allowed] で、デフォルト値の 0 を使用するか、無視できる最大行数を入力します。エラーを含む行数がこの値を超えると、ジョブは invalid メッセージとなり、失敗します。
    • 改行文字を含む引用符で囲まれたデータ セクションを CSV ファイルで許可するには、[Allow quoted newlines] ボックスをオンにします。デフォルト値は false です。
    • CSV ファイルで末尾のオプションの列が欠落している行を許可するには、[Allow jagged rows] ボックスをオンにします。欠損値は null として扱われます。オフの場合、末尾の列が欠落しているレコードは不良レコードとして処理され、不良レコードが多すぎる場合はジョブの結果内で無効なエラーが返されます。デフォルト値は false です。
    • テーブルのスキーマに存在しない行の値をすべて無視するには、[Ignore unknown values] ボックスをオンにします。
    • [Write preference] で、[Write if empty] を選択したままにします。これにより、新しいテーブルが作成され、データが読み込まれます。
    • テーブルを分割するには:
      • [Partitioning Type] で、[None] をクリックして [Day] を選択します。
      • [Partitioning Field] で、次の操作を行います。
      • パーティション分割テーブルを作成するには、DATE 列または TIMESTAMP 列を選択します。スキーマに DATE 列または TIMESTAMP 列が含まれていない場合、このオプションは使用できません。
      • 取り込み時間パーティション分割テーブルを作成するには、デフォルト値(_PARTITIONTIME)のままにします。
      • クエリを実行するパーティションを指定する WHERE 句の使用を必須にするには、[Require partition filter] ボックスをクリックします。パーティション フィルタを必須にすると、コストが削減され、パフォーマンスが向上する場合があります。詳細については、パーティション分割テーブルのクエリをご覧ください。[Partitioning type] を [None] に設定している場合、このオプションは使用できません。
    • テーブルをクラスタ化するには、[Clustering fields] ボックスに 1〜4 個のフィールド名を入力します。
    • Cloud Key Management Service 鍵を使用してテーブルを暗号化するには、[Destination encryption] で [Customer-managed encryption] を選択します。Default 設定をそのまま使用すると、BigQuery は Google が管理する鍵を使用して保存されているデータを暗号化します。
  7. [Create Table] をクリックします。

CLI

bq load コマンドを使用し、--source_format フラグに CSV を指定して、Cloud Storage URI を含めます。単一の URI、URI のカンマ区切りのリスト、ワイルドカードを含む URI を指定できます。スキーマをインラインまたはスキーマ定義ファイルに指定するか、スキーマ自動検出を使用します。

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

次のフラグを使用することもできます。

  • --allow_jagged_rows: 指定すると、CSV ファイルで末尾のオプションの列が欠落している行を受け入れます。欠損値は null として扱われます。オフの場合、末尾の列が欠落しているレコードは不良レコードとして処理され、不良レコードが多すぎる場合はジョブの結果内で無効なエラーが返されます。デフォルト値は false です。
  • --allow_quoted_newlines: 指定すると、改行文字を含む引用符で囲まれたデータ セクションが CSV ファイルで許可されます。デフォルト値は false です。
  • --field_delimiter: データ内の列間の境界を示す文字。タブ区切り文字には \ttab の両方を使用できます。デフォルト値は , です。
  • --null_marker: CSV データの null 値を表すオプションのカスタム文字列。
  • --skip_leading_rows: CSV ファイルの先頭でスキップするヘッダーの行数を指定します。デフォルト値は 0 です。
  • --quote: レコードを囲むために使用する引用符。デフォルト値は " です。引用符を使用しない場合は、空の文字列を使用します。
  • --max_bad_records: ジョブ全体が失敗する前に許容される不良レコードの最大数を整数で指定します。デフォルト値は 0 です。--max_bad_records 値にかかわらず、最大で任意のタイプの 5 つのエラーが返されます。
  • --ignore_unknown_values: 指定すると、CSV または JSON データで認識されない余分な値が許可され、無視されます。
  • --autodetect: 指定すると、CSV と JSON データのスキーマ自動検出が有効になります。
  • --time_partitioning_type: テーブルで時間ベースのパーティショニングを有効にし、パーティショニング タイプを設定します。現在、唯一の有効な値は、1 日に 1 つのパーティションを生成する DAY です。DATE 列または TIMESTAMP 列で分割されたテーブルを作成する場合、このフラグは省略可能です。
  • --time_partitioning_expiration: 時間ベースのパーティションを削除するタイミングを整数(秒単位)で指定します。パーティションの日付(UTC)に、この整数値を足した値が有効期限になります。
  • --time_partitioning_field: パーティション分割テーブルの作成に使用される DATE 列または TIMESTAMP 列。この値を指定せずに時間ベースのパーティショニングを有効にすると、取り込み時間パーティション分割テーブルが作成されます。
  • --require_partition_filter: 有効にすると、クエリを実行するパーティションを WHERE 句に指定する必要があります。パーティション フィルタを必須にすると、コストが削減され、パフォーマンスが向上する場合があります。詳細については、パーティション分割テーブルのクエリをご覧ください。
  • --clustering_fields: テーブルのクラスタ化に使用するカンマ区切りの列名のリスト。最大 4 個までの列名を指定できます。このフラグは、パーティション分割テーブルでのみ使用できます。
  • --destination_kms_key: テーブルデータの暗号化に使用される Cloud KMS 鍵。

    パーティション分割テーブルの詳細については、以下をご覧ください。

    クラスタ化テーブルの詳細については、以下をご覧ください。

    テーブルの暗号化の詳細については、以下をご覧ください。

CSV データを BigQuery に読み込むには、次のコマンドを入力します。

bq --location=location load \
--source_format=format \
dataset.table \
path_to_source \
schema

ここで

  • location はロケーションです。--location フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
  • formatCSV です。
  • dataset は既存のデータセットです。
  • table は、データの読み込み先のテーブル名です。
  • path_to_source は、完全修飾された Cloud Storage URI または URI のカンマ区切りのリストです。ワイルドカードもサポートされます。
  • schema は有効なスキーマです。スキーマはローカルの JSON ファイルにすることも、コマンドの一部としてインラインで入力することもできます。また、スキーマ定義を指定する代わりに、--autodetect フラグを使用することもできます。

例:

次のコマンドは、gs://mybucket/mydata.csv から mydataset 内の mytable というテーブルにデータを読み込みます。スキーマは、myschema.json という名前のローカル スキーマ ファイルで定義されています。

    bq load \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

次のコマンドは、gs://mybucket/mydata.csv から mydataset 内の mytable というテーブルにデータを読み込みます。スキーマは、myschema.json という名前のローカル スキーマ ファイルで定義されています。CSV ファイルには、2 行のヘッダーが含まれています。--skip_leading_rows を指定していない場合、ファイルにヘッダーが含まれていないと想定されます。

    bq load \
    --source_format=CSV \
    --skip_leading_rows=2
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

次のコマンドは、gs://mybucket/mydata.csv から mydataset 内の mytable という取り込み時間パーティション分割テーブルにデータを読み込みます。スキーマは、myschema.json という名前のローカル スキーマ ファイルで定義されています。

    bq load \
    --source_format=CSV \
    --time_partitioning_type=DAY \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

次のコマンドは、gs://mybucket/mydata.csv から mydataset 内の mytable というパーティション分割テーブルにデータを読み込みます。テーブルは mytimestamp 列で分割されます。スキーマは、myschema.json という名前のローカル スキーマ ファイルで定義されています。

    bq load \
    --source_format=CSV \
    --time_partitioning_field mytimestamp \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

次のコマンドは、gs://mybucket/mydata.csv から mydataset 内の mytable というテーブルにデータを読み込みます。スキーマは自動検出されます。

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

次のコマンドは、gs://mybucket/mydata.csv から mydataset 内の mytable というテーブルにデータを読み込みます。スキーマは、field:data_type, field:data_type の形式でインラインで定義されます。

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

次のコマンドは、gs://mybucket/ の複数のファイルから mydatasetmytable という名前のテーブルにデータを読み込みます。Cloud Storage の URI ではワイルドカードを使用しています。スキーマは自動検出されます。

    bq load \
    --autodetect \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata*.csv

次のコマンドは、gs://mybucket/ の複数のファイルから mydatasetmytable という名前のテーブルにデータを読み込みます。このコマンドでは、Cloud Storage の URI のカンマ区切りのリストをワイルドカード付きで使用しています。スキーマは、myschema.json という名前のローカル スキーマ ファイルで定義されています。

    bq load \
    --source_format=CSV \
    mydataset.mytable \
    "gs://mybucket/00/*.csv","gs://mybucket/01/*.csv" \
    ./myschema.json

API

  1. Cloud Storage のソースデータを参照する load ジョブを作成します。

  2. (省略可)ジョブリソースjobReference セクションにある location プロパティでロケーションを指定します。

  3. source URIs プロパティは、完全修飾の gs://bucket/object の形式にする必要があります。各 URI にワイルドカード文字「*」を 1 つ含めることができます。

  4. sourceFormat プロパティを CSV に設定して、CSV データ形式を指定します。

  5. ジョブのステータスを確認には、jobs.get(job_id*) を呼び出します。job_id は、最初のリクエストによって返されたジョブの ID です。

    • status.state = DONE の場合、ジョブは正常に完了しています。
    • status.errorResult プロパティが存在する場合は、リクエストが失敗したことを意味し、該当するオブジェクトにエラーを説明する情報が格納されます。リクエストが失敗した場合、テーブルは作成されず、データは読み込まれません。
    • status.errorResult が存在しない場合、ジョブは正常に完了していますが、一部の行のインポートで問題があったなど、致命的でないエラーが発生した可能性があります。致命的でないエラーは、返されたジョブ オブジェクトの status.errors プロパティに格納されています。

API に関する注:

  • 読み込みジョブはアトミックで一貫性があります。読み込みジョブが失敗した場合、データは一切利用できず、読み込みジョブが成功した場合はすべてのデータが利用可能になります。

  • おすすめの方法として、jobReference.jobId を呼び出して読み込みジョブを作成する際に、一意の ID を生成して、その ID を jobs.insert として渡します。この手法を使用すると、クライアントは既知のジョブ ID を使ってポーリングまたは再試行できるので、ネットワーク障害に強くなります。

  • 同じジョブ ID に対して jobs.insert を呼び出しても結果は同じになります。同じジョブ ID で何回でも再試行できますが、成功するのは、その中で 1 回だけです。

C#

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


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

public class BigQueryLoadTableGcsCsv
{
    public void LoadTableGcsCsv(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.csv";
        var dataset = client.GetDataset(datasetId);
        var schema = new TableSchemaBuilder {
            { "name", BigQueryDbType.String },
            { "post_abbr", BigQueryDbType.String }
        }.Build();
        var destinationTableRef = dataset.GetTableReference(
            tableId: "us_states");
        // Create job configuration
        var jobOptions = new CreateLoadJobOptions()
        {
            // The source format defaults to CSV; line below is optional.
            SourceFormat = FileFormat.Csv,
            SkipLeadingRows = 1
        };
        // Create and run job
        var loadJob = client.CreateLoadJob(
            sourceUri: gcsURI, destination: destinationTableRef,
            schema: schema, options: jobOptions);
        loadJob.PollUntilCompleted();  // Waits for the job to complete.
        // Display the number of rows uploaded
        BigQueryTable table = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Loaded {table.Resource.NumRows} rows to {table.FullyQualifiedId}");
    }
}

Go

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

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.csv")
gcsRef.SkipLeadingRows = 1
gcsRef.Schema = bigquery.Schema{
	{Name: "name", Type: bigquery.StringFieldType},
	{Name: "post_abbr", Type: bigquery.StringFieldType},
}
loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
loader.WriteDisposition = bigquery.WriteEmpty

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

if status.Err() != nil {
	return fmt.Errorf("Job completed with error: %v", status.Err())
}

Java

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

Job job = table.load(FormatOptions.csv(), sourceUri);
// Wait for the job to complete
try {
  Job completedJob =
      job.waitFor(
          RetryOption.initialRetryDelay(Duration.ofSeconds(1)),
          RetryOption.totalTimeout(Duration.ofMinutes(3)));
  if (completedJob != null && completedJob.getStatus().getError() == null) {
    // Job completed successfully
  } else {
    // Handle error case
  }
} catch (InterruptedException e) {
  // Handle interrupted wait
}

Node.js

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

// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the CSV file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.csv
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.csv';

async function loadCSVFromGCS() {
  // Imports a GCS file into a table with manually defined schema.

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

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
  const metadata = {
    sourceFormat: 'CSV',
    skipLeadingRows: 1,
    schema: {
      fields: [
        {name: 'name', type: 'STRING'},
        {name: 'post_abbr', type: 'STRING'},
      ],
    },
    location: 'US',
  };

  // Load data from a Google Cloud Storage file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(storage.bucket(bucketName).file(filename), metadata);

  // load() waits for the job to finish
  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 のリファレンス ドキュメントをご覧ください。

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';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table('us_states');

// create the import job
$gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.csv';
$schema = [
    'fields' => [
        ['name' => 'name', 'type' => 'string'],
        ['name' => 'post_abbr', 'type' => 'string']
    ]
];
$loadConfig = $table->loadFromStorage($gcsUri)->schema($schema)->skipLeadingRows(1);
$job = $table->runJob($loadConfig);
// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('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 のリファレンス ドキュメントをご覧ください。

Client.load_table_from_uri() メソッドを使用して、Cloud Storage にある CSV ファイルからデータを読み込みます。LoadJobConfig.schema プロパティの値を SchemaField オブジェクトのリストに設定することで、スキーマ定義を明示的に指定します。

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.schema = [
    bigquery.SchemaField("name", "STRING"),
    bigquery.SchemaField("post_abbr", "STRING"),
]
job_config.skip_leading_rows = 1
# The source format defaults to CSV, so the line below is optional.
job_config.source_format = bigquery.SourceFormat.CSV
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.csv"

load_job = client.load_table_from_uri(
    uri, dataset_ref.table("us_states"), job_config=job_config
)  # API request
print("Starting job {}".format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print("Job finished.")

destination_table = client.get_table(dataset_ref.table("us_states"))
print("Loaded {} rows.".format(destination_table.num_rows))

Ruby

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

require "google/cloud/bigquery"

def load_table_gcs_csv dataset_id = "your_dataset_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  gcs_uri  = "gs://cloud-samples-data/bigquery/us-states/us-states.csv"
  table_id = "us_states"

  load_job = dataset.load_job table_id, gcs_uri, skip_leading: 1 do |schema|
    schema.string "name"
    schema.string "post_abbr"
  end
  puts "Starting job #{load_job.job_id}"

  load_job.wait_until_done!  # Waits for table load to complete.
  puts "Job finished."

  table = dataset.table(table_id)
  puts "Loaded #{table.rows_count} rows to table #{table.id}"
end

CSV データをテーブルに追加、または CSV データでテーブルを上書きする

テーブルに追加のデータを読み込むには、ソースファイルを使用するか、クエリ結果を追加します。

Console および従来の BigQuery ウェブ UI では、[書き込み設定](Write preference)オプションを使用して、ソースファイルまたはクエリ結果からデータを読み込むときに行う操作を指定します。

追加のデータをテーブルに読み込む場合、以下のオプションがあります。

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

既存のテーブルにデータを読み込む場合、読み込みジョブでデータの追加やテーブルの上書きを行うことができます。

次の方法でテーブルを追加または上書きできます。

  • GCP Console または従来のウェブ UI を使用する
  • CLI の bq load コマンドを使用する
  • jobs.insert API メソッドを呼び出して load ジョブを構成する
  • クライアント ライブラリを使用する

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。
    GCP Console に移動する

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

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

    テーブルを作成

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

    • [テーブルの作成元] で [Cloud Storage] を選択します。

    • ソース フィールドで Cloud Storage URI を参照または入力します。BigQuery ウェブ UI には複数の URI を指定できませんが、ワイルドカードは使用できます。Cloud Storage バケットは、データを追加または上書きするテーブルを含むデータセットと同じロケーションに存在している必要があります。

      ファイルを選択

    • [ファイル形式] で [CSV] を選択します。

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

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

      データセットを選択

    • [テーブル名] フィールドに、BigQuery で追加または上書きするテーブルの名前を入力します。

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

  6. [スキーマ] セクションの [自動検出] で、[スキーマと入力パラメータ] をオンにしてスキーマの自動検出を有効にします。次の方法でスキーマ定義を手動で入力することもできます。

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

      スキーマを JSON 配列として追加する

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

      [フィールドを追加] ボタンを使用してスキーマ定義を追加する

  7. [パーティションとクラスタの設定] はデフォルト値のままにします。追加や上書きでテーブルをパーティション分割テーブルまたはクラスタ化テーブルに変換できません。GCP Console では、読み込みジョブでパーティション分割テーブルやクラスタ化テーブルの追加または上書きを行うことはできません。

  8. [詳細オプション] をクリックします。

    • [書き込み設定] で、[テーブルに追加する] または [テーブルを上書きする] を選択します。
    • [許可されているエラー数] で、デフォルト値の 0 を使用するか、無視できる最大行数を入力します。エラーを含む行数がこの値を超えると、ジョブは invalid メッセージとなり、失敗します。
    • テーブルのスキーマに存在しない行の値を無視するには、[不明な値] で [不明な値を無視する] をオンにします。
    • [フィールド区切り文字] で、CSV ファイル内のセルの区切り文字を選択します。[カンマ]、[タブ]、[パイプ]、[カスタム] のいずれかを選択します。[カスタム] を選択した場合、[カスタムのフィールド区切り文字] ボックスに区切り文字を入力します。デフォルト値はカンマです。
    • [スキップするヘッダー行] で、CSV ファイルでスキップするヘッダーの行数を入力します。デフォルト値は 0 です。
    • 引用符で囲まれた改行を使用する場合は、[引用符で囲まれた改行を許可する] をオンにして、改行文字を含む引用符で囲まれたデータ セクションを CSV ファイルで許可します。デフォルト値は false です。
    • ジャグ行を使用する場合、[ジャグ行を許可する] をオンにして、CSV ファイルで末尾のオプションの列が欠落している行を許可します。欠損値は null として扱われます。オフの場合、末尾の列が欠落しているレコードは不良レコードとして処理され、不良レコードが多すぎる場合はジョブの結果内で無効なエラーが返されます。デフォルト値は false です。
    • Cloud Key Management Service 鍵を使用するには、[暗号化] で [顧客管理の暗号鍵] をクリックします。[Google が管理する鍵] の設定をそのままにすると、BigQuery は保存されているデータを暗号化します

      テーブルを上書きする

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

従来の UI

  1. BigQuery ウェブ UI に移動します。
    BigQuery ウェブ UI に移動

  2. ナビゲーション パネルで、データセットにカーソルを合わせて下矢印アイコン 下矢印アイコン画像 をクリックし、[Create new table] をクリックします。読み込みジョブでデータを追加または上書きするプロセスは、読み込みジョブでテーブルを作成するプロセスと同じです。

  3. [Create Table] ページの [Source Data] セクションで、次の操作を行います。

    • [Location] で [Cloud Storage] を選択し、ソース フィールドに Cloud Storage URI を入力します。UI では URI の複数指定はできませんが、ワイルドカードはサポートされています。Cloud Storage バケットは、データを追加または上書きするテーブルを含むデータセットと同じロケーションに存在している必要があります。
    • [File format] で [CSV] を選択します。
  4. [Create Table] ページの [Destination Table] セクションで、次の操作を行います。

    • [Table name] で適切なデータセットを選択し、追加または上書きするテーブルの名前をテーブル名のフィールドに入力します。
    • [Table type] が [Native table] に設定されていることを確認します。
  5. [Schema] セクションにスキーマ定義を入力します。

    • CSV ファイルの場合、[Auto-detect] オプションをオンにしてスキーマの自動検出を有効にできます。

      自動検出リンク

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

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

        スキーマを JSON 配列として追加する

      • [Add Field] を使用して、スキーマを手動で入力します。

        追加フィールドを使用してスキーマを追加する

  6. [Options] セクションで次の操作を行います。

    • [Field delimiter] で、CSV ファイル内のセルの区切り文字を選択します。[Comma]、[Tab]、[Pipe]、[Other] のいずれかを選択します。[Other] を選択した場合、[Custom field delimiter] ボックスに区切り文字を入力します。デフォルト値は Comma です。
    • [Header rows to skip] で、CSV ファイルでスキップするヘッダーの行数を入力します。デフォルト値は 0 です。
    • [Number of errors allowed] で、デフォルト値の 0 を使用するか、無視できる最大行数を入力します。エラーを含む行数がこの値を超えると、ジョブは invalid メッセージとなり、失敗します。
    • 改行文字を含む引用符で囲まれたデータ セクションを CSV ファイルで許可するには、[Allow quoted newlines] ボックスをオンにします。デフォルト値は false です。
    • CSV ファイルで末尾のオプションの列が欠落している行を許可するには、[Allow jagged rows] ボックスをオンにします。欠損値は null として扱われます。オフの場合、末尾の列が欠落しているレコードは不良レコードとして処理され、不良レコードが多すぎる場合はジョブの結果内で無効なエラーが返されます。デフォルト値は false です。
    • テーブルのスキーマに存在しない行の値をすべて無視するには、[Ignore unknown values] ボックスをオンにします。
    • [Write preference] で、[Append to table] または [Overwrite table] を選択します。
    • [Partitioning Type]、[Partitioning Field]、[Require partition filter]、[Clustering Fields] は、デフォルト値を使用します。追加や上書きでテーブルをパーティション分割テーブルまたはクラスタ化テーブルに変換できません。ウェブ UI では、読み込みジョブでパーティション分割テーブルやクラスタ化テーブルの追加または上書きを行うことはできません。
    • Cloud Key Management Service 鍵を使用してテーブルを暗号化するには、[Destination encryption] で [Customer-managed encryption] を選択します。Default 設定をそのまま使用すると、BigQuery は Google が管理する鍵を使用して保存されているデータを暗号化します。
  7. [Create Table] をクリックします。

CLI

bq load コマンドを使用し、--source_format フラグに CSV を指定して、Cloud Storage URI を含めます。単一の URI、URI のカンマ区切りのリスト、ワイルドカードを含む URI を指定できます。

スキーマをインラインまたはスキーマ定義ファイルに指定するか、スキーマ自動検出を使用します。

テーブルを上書きするには、--replace フラグを指定します。テーブルにデータを追加するには、--noreplace フラグを使用します。フラグを指定しない場合、デフォルトではデータが追加されます。

テーブルを追加または上書きするときに、テーブルのスキーマを変更できます。読み込みオペレーションでサポートされるスキーマの変更については、テーブル スキーマの変更をご覧ください。

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

次のフラグを使用することもできます。

  • --allow_jagged_rows: 指定すると、CSV ファイルで末尾のオプションの列が欠落している行を受け入れます。欠損値は null として扱われます。オフの場合、末尾の列が欠落しているレコードは不良レコードとして処理され、不良レコードが多すぎる場合はジョブの結果内で無効なエラーが返されます。デフォルト値は false です。
  • --allow_quoted_newlines: 指定すると、改行文字を含む引用符で囲まれたデータ セクションが CSV ファイルで許可されます。デフォルト値は false です。
  • --field_delimiter: データ内の列間の境界を示す文字。タブ区切り文字には \ttab の両方を使用できます。デフォルト値は , です。
  • --null_marker: CSV データの null 値を表すオプションのカスタム文字列。
  • --skip_leading_rows: CSV ファイルの先頭でスキップするヘッダーの行数を指定します。デフォルト値は 0 です。
  • --quote: レコードを囲むために使用する引用符。デフォルト値は " です。引用符を使用しない場合は、空の文字列を使用します。
  • --max_bad_records: ジョブ全体が失敗する前に許容される不良レコードの最大数を整数で指定します。デフォルト値は 0 です。--max_bad_records 値にかかわらず、最大で任意のタイプの 5 つのエラーが返されます。
  • --ignore_unknown_values: 指定すると、CSV または JSON データで認識されない余分な値が許可され、無視されます。
  • --autodetect: 指定すると、CSV と JSON データのスキーマ自動検出が有効になります。
  • --destination_kms_key: テーブルデータの暗号化に使用される Cloud KMS 鍵。
bq --location=location load \
--[no]replace \
--source_format=format \
dataset.table \
path_to_source \
schema

ここで

  • locationロケーションです。--location フラグは省略可能です。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
  • formatCSV です。
  • dataset は既存のデータセットです。
  • table は、データの読み込み先のテーブル名です。
  • path_to_source は、完全修飾された Cloud Storage URI または URI のカンマ区切りのリストです。ワイルドカードもサポートされます。
  • schema は有効なスキーマです。スキーマはローカルの JSON ファイルにすることも、コマンドの一部としてインラインで入力することもできます。また、スキーマ定義を指定する代わりに、--autodetect フラグを使用することもできます。

例:

次のコマンドは、gs://mybucket/mydata.csv からデータを読み込んで mydataset 内の mytable というテーブルを上書きします。スキーマはスキーマ自動検出を使用して定義されます。

    bq load \
    --autodetect \
    --replace \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv

次のコマンドは、gs://mybucket/mydata.csv からデータを読み込んで mydataset 内の mytable というテーブルに追加します。スキーマは、JSON スキーマ ファイル myschema.json で定義されます。

    bq load \
    --noreplace \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

API

  1. Cloud Storage のソースデータを参照する load ジョブを作成します。

  2. (省略可)ジョブリソースjobReference セクションにある location プロパティでロケーションを指定します。

  3. source URIs プロパティは、完全修飾の gs://bucket/object の形式にする必要があります。複数の URI をカンマ区切りのリストとして含めることができます。ワイルドカードも使用できます。

  4. configuration.load.sourceFormat プロパティを CSV に設定して、データ形式を指定します。

  5. configuration.load.writeDisposition プロパティを WRITE_TRUNCATE または WRITE_APPEND に設定して、書き込み設定を指定します。

Go

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

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.csv")
gcsRef.SourceFormat = bigquery.CSV
gcsRef.AutoDetect = true
gcsRef.SkipLeadingRows = 1
loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
loader.WriteDisposition = bigquery.WriteTruncate

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

if status.Err() != nil {
	return fmt.Errorf("job completed with error: %v", status.Err())
}

Node.js

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

既存のテーブルの行を置換するには、metadata パラメータ内の writeDisposition の値を 'WRITE_TRUNCATE' に設定します。

// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the CSV file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.csv
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.csv';

async function loadCSVFromGCSTruncate() {
  /**
   * Imports a GCS file into a table and overwrites
   * table data if table already exists.
   */

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

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
  const metadata = {
    sourceFormat: 'CSV',
    skipLeadingRows: 1,
    schema: {
      fields: [
        {name: 'name', type: 'STRING'},
        {name: 'post_abbr', type: 'STRING'},
      ],
    },
    // Set the write disposition to overwrite existing table data.
    writeDisposition: 'WRITE_TRUNCATE',
    location: 'US',
  };

  // Load data from a Google Cloud Storage file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(storage.bucket(bucketName).file(filename), metadata);
  // load() waits for the job to finish
  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;
  }
}

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

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';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$table = $bigQuery->dataset($datasetId)->table($tableId);

// create the import job
$gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.csv';
$loadConfig = $table->loadFromStorage($gcsUri)->skipLeadingRows(1)->writeDisposition('WRITE_TRUNCATE');
$job = $table->runJob($loadConfig);

// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('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 のリファレンス ドキュメントをご覧ください。

既存テーブルの行を置換するには、LoadJobConfig.write_disposition プロパティを SourceFormat の定数 WRITE_TRUNCATE に設定します。

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('existing_table')

job_config = bigquery.LoadJobConfig()
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
job_config.skip_leading_rows = 1
# The source format defaults to CSV, so the line below is optional.
job_config.source_format = bigquery.SourceFormat.CSV
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.csv"
load_job = client.load_table_from_uri(
    uri, table_ref, job_config=job_config
)  # API request
print("Starting job {}".format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print("Job finished.")

destination_table = client.get_table(table_ref)
print("Loaded {} rows.".format(destination_table.num_rows))

CSV のオプション

BigQuery による CSV データの解析方法を変更するには、Console、従来の UI、CLI、または API で追加のオプションを指定します。

CSV 形式の詳細については、RFC 4180 をご覧ください。

CSV のオプション Console のオプション 従来の UI のオプション CLI のフラグ BigQuery API のプロパティ 説明
フィールド区切り文字 フィールド区切り文字: カンマ、タブ、パイプ、カスタム Field delimiter: Comma、Tab、Pipe、Other -F または --field_delimiter fieldDelimiter (省略可)CSV ファイル内のフィールド区切り文字。区切り文字には、ISO-8859-1 の任意の 1 バイト文字を使用できます。128~255 の範囲の文字を使用するには、その文字を UTF-8 としてエンコードする必要があります。BigQuery は文字列を ISO-8859-1 エンコードに変換し、エンコードされた文字列の先頭バイトを使用してデータを未加工のバイナリ状態で分割します。また、BigQuery はタブ区切りを示すエスケープ シーケンス「\t」もサポートしています。デフォルト値はカンマ(「,」)です。
ヘッダー行 スキップするヘッダー行 Header rows to skip --skip_leading_rows skipLeadingRows (省略可)ソースデータ内のヘッダー行の数を示す整数。
許可されている不良レコード数 許容されるエラー数 Number of errors allowed --max_bad_records maxBadRecords (オプション)BigQuery でジョブの実行時に無視できる不良レコードの最大数。不良レコードの数がこの値を超えると、ジョブ結果で「無効」エラーが返されます。デフォルト値は 0 で、すべてのレコードが有効である必要があります。
改行文字 引用符で囲まれた改行を許可する Allow quoted newlines --allow_quoted_newlines allowQuotedNewlines (省略可)改行文字を含む引用符で囲まれたデータ セクションを CSV ファイルで許可するかどうかを指定します。デフォルト値は false です。
カスタム Null 値 なし なし --null_marker nullMarker (省略可)CSV ファイル内で null 値を表す文字列を指定します。たとえば、「\N」を指定すると、BigQuery に CSV ファイルが読み込まれるときに「\N」が null 値として解釈されます。デフォルト値は空の文字列です。このプロパティにカスタム値を設定すると、STRING と BYTE を除くすべてのデータ型で、空の文字列がある場合にエラーがスローされます。STRING 列と BYTE 列では、空の文字列は空の値として解釈されます。
末尾のオプションの列 ジャグ行を許可する Allow jagged rows --allow_jagged_rows allowJaggedRows (省略可)末尾のオプションの列が欠落している行を受け入れます。欠損値は null として扱われます。false の場合、末尾の列が欠落しているレコードは不良レコードとして処理され、不良レコードが多すぎる場合はジョブの結果内で無効なエラーが返されます。デフォルト値は false です。これは CSV のみに適用され、他の形式では無視されます。
不明な値 不明な値を無視 Ignore unknown values --ignore_unknown_values ignoreUnknownValues (省略可)テーブル スキーマで示されていない余分な値を許可するかどうかを指定します。true の場合、余分な値は無視されます。false の場合、余分な列を含むレコードは不良レコードとして処理され、不良レコードが多すぎる場合はジョブの結果内で無効なエラーが返されます。デフォルト値は false です。何が余分な値として扱われるかは、sourceFormat プロパティによって決まります。
  • CSV: 末尾の列
  • JSON: どの列名とも一致しない名前付き値
引用符 なし なし --quote quote (省略可)CSV ファイル内のデータ セクションを囲む引用符として使用される値。BigQuery は文字列を ISO-8859-1 エンコードに変換し、エンコードされた文字列の先頭バイトを使用してデータを未加工のバイナリ状態で分割します。デフォルト値は二重引用符('"')です。データに引用符で囲まれたセクションが含まれていない場合は、このプロパティの値を空の文字列に設定します。データに引用符で囲まれた改行文字が含まれている場合は、allowQuotedNewlines プロパティの値を true に設定する必要もあります。
エンコード なし なし -E または --encoding encoding (省略可)データの文字エンコーディング。サポートされている値は UTF-8 と ISO-8859-1 です。デフォルト値は UTF-8 です。BigQuery は、quote プロパティと fieldDelimiter プロパティの値を使用して未加工のバイナリデータを分割してからデータをデコードします。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。