テーブル スキーマの変更
このドキュメントでは、既存の BigQuery テーブルのスキーマ定義を変更する方法について説明します。
このドキュメントで説明するスキーマの変更は、SQL データ定義言語(DDL)ステートメントを使用して行えます。これらのステートメントには料金が発生しません。
このページで説明されているすべての方法でテーブル スキーマを変更できます。テーブル データを Cloud Storage にエクスポートし、変更されたスキーマ定義を使用して新しいテーブルにデータを読み込みます。BigQuery の読み込みジョブと抽出ジョブは無料ですが、エクスポートしたデータを Cloud Storage に保存するには料金が発生します。以降のセクションでは、さまざまなスキーマの変更を行うその他の方法について説明します。
列の追加
次のいずれかの方法で、既存のテーブルのスキーマ定義に列を追加できます。
- 新しい空の列を追加します。
- 読み込みジョブまたはクエリジョブでテーブルを上書きします。
- 読み込みジョブまたはクエリジョブを使用してテーブルにデータを追加します。
追加する列は、BigQuery の列名の規則に準拠している必要があります。スキーマ コンポーネントの作成の詳細については、スキーマの指定をご覧ください。
空の列を追加する
既存のテーブル スキーマに新しい列を追加する場合、その列は NULLABLE または REPEATED である必要があります。REQUIRED 列を既存のテーブル スキーマに追加することはできません。API または bq コマンドライン ツールで既存のテーブル スキーマに REQUIRED 列を追加すると、エラーが発生します。ネストされた REQUIRED 列は、新しい RECORD フィールドの一部として作成します。REQUIRED 列を追加できるのは、データの読み込み中にテーブルを作成する場合、またはスキーマ定義を持つ空のテーブルを作成する場合だけです。
テーブルのスキーマ定義に空の列を追加するには:
コンソール
Google Cloud コンソールで、[BigQuery] ページに移動します。
左側のペインで、 [エクスプローラ] をクリックします。

左側のペインが表示されていない場合は、 左側のペインを開くをクリックしてペインを開きます。
[エクスプローラ] ペインでプロジェクトを開き、[データセット] をクリックして、データセットを選択します。
[概要 > テーブル] をクリックし、テーブルを選択します。
詳細ペインで [スキーマ] タブをクリックします。
[スキーマを編集] をクリックします。このボタンを表示するには、スクロールが必要な場合があります。
[現在のスキーマ] ページの [新しいフィールド] で、[フィールドを追加] をクリックします。
列の追加が完了したら、[保存] をクリックします。
SQL
ALTER TABLE ADD COLUMN DDL ステートメントを使用します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
ALTER TABLE mydataset.mytable ADD COLUMN new_column STRING;
[実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
bq update コマンドを発行し、JSON スキーマ ファイルを指定します。更新するテーブルがデフォルト以外のプロジェクトにある場合は、PROJECT_ID:DATASET の形式でプロジェクト ID をデータセット名に追加します。
bq update PROJECT_ID:DATASET.TABLE SCHEMA
次のように置き換えます。
PROJECT_ID: プロジェクト ID。DATASET: 更新するテーブルを含むデータセットの名前。TABLE: 更新するテーブルの名前。SCHEMA: ローカルマシン上の JSON スキーマ ファイルへのパス
インライン スキーマを指定する場合は、列の説明、モード、RECORD(STRUCT)型を指定することはできません。すべての列モードはデフォルトで NULLABLE になります。そのため、ネストされた新しい列を RECORD に追加する場合は、JSON スキーマ ファイルを指定する必要があります。
インライン スキーマ定義を使用して列を追加しようとする場合は、新しい列を含めてスキーマ定義全体を指定する必要があります。インライン スキーマ定義を使用して列モードを指定することができないため、既存の REPEATED 列を NULLABLE に変更すると、BigQuery error in update
operation: Provided Schema does not match Table
PROJECT_ID:dataset.table. Field field has changed mode
from REPEATED to NULLABLE. というエラーが発生します。
bq コマンドライン ツールを使用して既存のテーブルに列を追加する場合に推奨される方法は、JSON スキーマ ファイルを指定することです。
JSON スキーマ ファイルを使用して、テーブルのスキーマに列を追加するには:
まず、
--schemaフラグを指定したbq showコマンドを発行して、既存のテーブル スキーマをファイルに書き込みます。更新するテーブルがデフォルト以外のプロジェクトにある場合は、PROJECT_ID:DATASETの形式でプロジェクト ID をデータセット名に追加します。bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
次のように置き換えます。
PROJECT_ID: プロジェクト ID。DATASET: 更新するテーブルを含むデータセットの名前。TABLE: 更新するテーブルの名前。SCHEMA: ローカルマシンに書き込まれるスキーマ定義ファイル。
たとえば、
mydataset.mytableのスキーマ定義をファイルに書き込むには、次のコマンドを入力します。mydataset.mytableはデフォルト プロジェクトにあります。bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.jsonスキーマ ファイルをテキスト エディタで開きます。スキーマは次のようになっています。
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]スキーマ定義の末尾に新しい列を追加します。新しい列を配列内の別の場所に追加しようとすると、
BigQuery error in update operation: Precondition Failedというエラーが返されます。JSON ファイルを使用して、新しい列の説明、
NULLABLEまたはREPEATEDモード、RECORD型を指定できます。たとえば、前の手順のスキーマ定義を使用すると、新しい JSON 配列は次のようになります。この例では、新しいNULLABLE列がcolumn4という名前で追加されています。column4に説明が含まれています。[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" }, { "description": "my new column", "mode": "NULLABLE", "name": "column4", "type": "STRING" } ]JSON スキーマ ファイルの操作の詳細については、JSON スキーマ ファイルの指定をご覧ください。
スキーマ ファイルを更新したら、次のコマンドを発行してテーブルのスキーマを更新します。更新するテーブルがデフォルト以外のプロジェクトにある場合は、
PROJECT_ID:DATASETの形式でプロジェクト ID をデータセット名に追加します。bq update PROJECT_ID:DATASET.TABLE SCHEMA
次のように置き換えます。
PROJECT_ID: プロジェクト ID。DATASET: 更新するテーブルを含むデータセットの名前。TABLE: 更新するテーブルの名前。SCHEMA: ローカルマシンに書き込まれるスキーマ定義ファイル。
たとえば、次のコマンドを入力すると、デフォルト プロジェクトにある
mydataset.mytableのスキーマ定義が更新されます。ローカルマシン上にあるスキーマ ファイルへのパスは/tmp/myschema.jsonです。bq update mydataset.mytable /tmp/myschema.json
API
tables.patch メソッドを呼び出して、schema プロパティを使用して空の列をスキーマ定義に追加します。tables.update メソッドはテーブル リソース全体を置き換えるため、tables.patch メソッドの方が適切です。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
新しい SchemaField オブジェクトを Table.schema のコピーに付加し、Table.schema プロパティの値を更新後のスキーマで置き換えます。ネストされた列を RECORD 列に追加する
新しい列をテーブルのスキーマに追加するだけでなく、ネストされた列を RECORD 列に追加することもできます。ネストされた列を追加する方法は、新しい列を追加する場合と非常によく似ています。
コンソール
新しくネストされたフィールドを既存の RECORD 列に追加することは、 Google Cloud コンソールでサポートされていません。
SQL
SQL DDL ステートメントを使用して新しくネストされたフィールドを既存の RECORD 列に追加できません。
bq
bq update コマンドを発行して、ネストされたフィールドを既存の RECORD 列のスキーマ定義に追加する JSON スキーマ ファイルを指定します。更新するテーブルがデフォルト以外のプロジェクトにある場合は、PROJECT_ID:DATASET の形式でプロジェクト ID をデータセット名に追加します。
bq update PROJECT_ID:DATASET.TABLE SCHEMA
次のように置き換えます。
PROJECT_ID: プロジェクト ID。DATASET: 更新するテーブルを含むデータセットの名前。TABLE: 更新するテーブルの名前。SCHEMA: ローカルマシン上の JSON スキーマ ファイルへのパス
インライン スキーマを指定する場合は、列の説明、モード、RECORD(STRUCT)型を指定することはできません。すべての列モードはデフォルトで NULLABLE になります。そのため、ネストされた新しい列を RECORD に追加する場合は、JSON スキーマ ファイルを指定する必要があります。
JSON スキーマ ファイルを使用して、ネストされた列を RECORD に追加するには:
まず、
--schemaフラグを指定したbq showコマンドを発行して、既存のテーブル スキーマをファイルに書き込みます。更新するテーブルがデフォルト以外のプロジェクトにある場合は、PROJECT_ID:DATASET.TABLEの形式でプロジェクト ID をデータセット名に追加します。bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
次のように置き換えます。
PROJECT_ID: プロジェクト ID。DATASET: 更新するテーブルを含むデータセットの名前。TABLE: 更新するテーブルの名前。SCHEMA: ローカルマシンに書き込まれるスキーマ定義ファイル。
たとえば、
mydataset.mytableのスキーマ定義をファイルに書き込むには、次のコマンドを入力します。mydataset.mytableはデフォルト プロジェクトにあります。bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.jsonスキーマ ファイルをテキスト エディタで開きます。スキーマは次のようになっています。この例では、
column3はネストされた繰り返し列です。ネストされた列はnested1とnested2です。fields配列には、column3内にネストされたフィールドが入ります。[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]新しくネストされた列を
fields配列の末尾に追加します。この例では、nested3が新しくネストされた列です。[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested3", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]JSON スキーマ ファイルの操作の詳細については、JSON スキーマ ファイルの指定をご覧ください。
スキーマ ファイルを更新したら、次のコマンドを発行してテーブルのスキーマを更新します。更新するテーブルがデフォルト以外のプロジェクトにある場合は、
PROJECT_ID:DATASETの形式でプロジェクト ID をデータセット名に追加します。bq update PROJECT_ID:DATASET.TABLE SCHEMA
次のように置き換えます。
PROJECT_ID: プロジェクト ID。DATASET: 更新するテーブルを含むデータセットの名前。TABLE: 更新するテーブルの名前。SCHEMA: ローカルマシン上の JSON スキーマ ファイルへのパス
たとえば、次のコマンドを入力すると、デフォルト プロジェクトにある
mydataset.mytableのスキーマ定義が更新されます。ローカルマシン上にあるスキーマ ファイルへのパスは/tmp/myschema.jsonです。bq update mydataset.mytable /tmp/myschema.json
API
tables.patch メソッドを呼び出して、schema プロパティを使用してネストされた列をスキーマ定義に追加します。tables.update メソッドはテーブル リソース全体を置き換えるため、tables.patch メソッドの方が適切です。
データを上書きまたは追記するときの列の追加
既存のテーブルにデータを読み込んで上書きする際、そのテーブルに新しい列を追加できます。上書きする既存のテーブルのスキーマは、読み込んでいるデータのスキーマを使用して上書きされます。読み込みジョブを使用してテーブルを上書きする方法については、データの形式に関するドキュメントをご覧ください。
読み込み追加ジョブで列を追加する
読み込みジョブでデータをテーブルに追加するときに、テーブルに列を追加できます。新しいスキーマは、次のいずれかによって決まります。
- 自動検出(CSV ファイルと JSON ファイルの場合)
- JSON スキーマ ファイル(CSV ファイルおよび JSON ファイル用)で指定されたスキーマ
- Avro、ORC、Parquet、Datastore エクスポート ファイルの自己記述型ソースデータ
JSON ファイルでスキーマを指定する場合は、その中で新しい列を定義する必要があります。新しい列定義がない場合、データを追記しようとするとエラーが返されます。
追記オペレーション中に新しい列を追加する場合、既存の行の新しい列の値は NULL に設定されます。
読み込みジョブ中にテーブルにデータを追記するときに新しい列を追加するには、次のいずれかのオプションを使用します。
bq
bq load コマンドを使用してデータを読み込み、--noreplace フラグを指定して、データを既存のテーブルに追記していることを示します。
付加するデータが CSV 形式または改行区切りの JSON 形式である場合は、--autodetect フラグを指定してスキーマの自動検出を使用するか、JSON スキーマ ファイルでスキーマを指定します。追加された列は、Avro または Datastore エクスポート ファイルから自動的に推定されます。
--schema_update_option フラグを ALLOW_FIELD_ADDITION に設定して、追記しているデータに新しい列が含まれていることを示します。
追記するテーブルがデフォルト以外のプロジェクトのデータセットにある場合は、PROJECT_ID:DATASET の形式でプロジェクト ID をデータセット名に追加します。
(省略可)--location フラグを指定して、その値をロケーションに設定します。
load コマンドを次のように入力します。
bq --location=LOCATION load \ --noreplace \ --autodetect \ --schema_update_option=ALLOW_FIELD_ADDITION \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
次のように置き換えます。
LOCATION: ロケーションの名前。--locationフラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値をasia-northeast1に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。FORMAT: スキーマの形式。NEWLINE_DELIMITED_JSON、CSV、AVRO、PARQUET、ORC、DATASTORE_BACKUP。PROJECT_ID: プロジェクト ID。DATASET: テーブルを含むデータセットの名前。TABLE: 追記するテーブルの名前。PATH_TO_SOURCE: 完全修飾の Cloud Storage URI、URI のカンマ区切りのリスト、またはローカルマシン上のデータファイルのパス。SCHEMA: ローカルの JSON スキーマ ファイルのパス。--autodetectを指定していない場合、スキーマ ファイルは CSV ファイルおよび JSON ファイルに対してのみ必要です。Avro と Datastore のスキーマはソースデータから推定されます。
例:
次のコマンドを入力して、ローカル Avro データファイル /tmp/mydata.avro を mydataset.mytable に、読み込みジョブを使用して追記します。スキーマは Avro データから自動的に推定できるため、--autodetect フラグを使用する必要はありません。mydataset はデフォルト プロジェクトにあります。
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
次のコマンドを入力して、Cloud Storage の改行区切りの JSON データファイルを mydataset.mytableに、読み込みジョブを使用して追記します。--autodetect フラグは、新しい列を検出するために使用します。mydataset はデフォルト プロジェクトにあります。
bq load \
--noreplace \
--autodetect \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json
次のコマンドを入力して、Cloud Storage の改行区切りの JSON データファイルを mydataset.mytableに、読み込みジョブを使用して追記します。新しい列を含むスキーマは、ローカルの JSON スキーマ ファイル /tmp/myschema.json で定義されています。mydataset はデフォルト プロジェクトではなく myotherproject にあります。
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
myotherproject:mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
API
jobs.insert メソッドを呼び出します。load ジョブを構成し、次のプロパティを設定します。
sourceUrisプロパティを使用して、Cloud Storage 内のデータを参照します。sourceFormatプロパティを設定して、データ形式を指定します。schemaプロパティでスキーマを指定します。schemaUpdateOptionsプロパティを使用して、スキーマ更新オプションを指定します。writeDispositionプロパティを使用して、宛先テーブルの書き込み処理をWRITE_APPENDに設定します。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
クエリ追加ジョブで列を追加する
クエリ結果をテーブルに追加するときに、テーブルに列を追加できます。
クエリジョブで追記オペレーションを使用して列を追加すると、クエリ結果のスキーマが使用されて宛先テーブルのスキーマが更新されます。ある場所のテーブルにクエリを実行して、別の場所のテーブルに結果を書き込むことはできません。
クエリジョブ中にテーブルにデータを追加する際に新しい列を追加するには、次のいずれかのオプションを選択します。
bq
bq query コマンドを使用してデータに対するクエリを実行し、--destination_table フラグを指定してどのテーブルを追記しているかを示します。
クエリ結果を既存の宛先テーブルに追記していることを指定するには、--append_table フラグを指定します。
--schema_update_option フラグを ALLOW_FIELD_ADDITION に設定して、追記しているクエリ結果に新しい列が含まれていることを示します。
クエリに GoogleSQL 構文を使用するには、use_legacy_sql=false フラグを指定します。
追記するテーブルがデフォルト以外のプロジェクトのデータセットにある場合は、PROJECT_ID:DATASET の形式でプロジェクト ID をデータセット名に追加します。クエリを実行するテーブルと宛先テーブルは同じ場所にある必要があります。
(省略可)--location フラグを指定して、その値をロケーションに設定します。
bq --location=LOCATION query \ --destination_table PROJECT_ID:DATASET.TABLE \ --append_table \ --schema_update_option=ALLOW_FIELD_ADDITION \ --use_legacy_sql=false \ 'QUERY'
次のように置き換えます。
LOCATION: ロケーションの名前。--locationフラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値をasia-northeast1に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。クエリ結果は、別のロケーションのテーブルに追記できません。PROJECT_ID: プロジェクト ID。dataset: 追記するテーブルを含むデータセットの名前。TABLE: 追記するテーブルの名前。QUERY: GoogleSQL 構文のクエリ。
例:
次のコマンドを入力して、デフォルト プロジェクトで mydataset.mytable のクエリを実行したり、クエリ結果をmydataset.mytable2 に (デフォルト プロジェクトでも同様)追記したりできます。
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
次のコマンドを入力して、デフォルト プロジェクトで mydataset.mytable のクエリを実行できます。また、クエリ結果を myotherproject の mydataset.mytable2 に追記することもできます。
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
jobs.insert メソッドを呼び出します。query ジョブを構成し、次のプロパティを設定します。
destinationTableプロパティを使用して宛先テーブルを指定します。writeDispositionプロパティを使用して、宛先テーブルの書き込み処理をWRITE_APPENDに設定します。schemaUpdateOptionsプロパティを使用して、スキーマ更新オプションを指定します。queryプロパティを使用して GoogleSQL クエリを指定します。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
列の名前を変更する
テーブルの列の名前を変更するには、ALTER TABLE RENAME COLUMN DDL ステートメントを使用します。次の例では、mytable の列 old_name の名前を new_name に変更します。
ALTER TABLE mydataset.mytable RENAME COLUMN old_name TO new_name;
ALTER TABLE RENAME COLUMN ステートメントの詳細については、DDL の詳細をご覧ください。
列のデータ型を変更する
Google Cloud コンソール、bq コマンドライン ツール、BigQuery API では列のデータ型を変更できません。列の新しいデータ型を指定するスキーマを適用してテーブルを更新しようとすると、次のようなエラーが返されます。
DDL ステートメントを使用して列のデータ型を変更する
GoogleSQL を使用して、列のデータ型に特定の変更を加えることができます。サポートされているデータ型の変換の詳細と完全なリストについては、ALTER COLUMN SET DATA TYPE DDL ステートメントをご覧ください。
次の例では、INT64 型の列を持つテーブルを作成してから、型を NUMERIC に更新します。
CREATE TABLE mydataset.mytable(c1 INT64); ALTER TABLE mydataset.mytable ALTER COLUMN c1 SET DATA TYPE NUMERIC;
次の例では、2 つのフィールドにネストされた列が配置されているテーブルを作成し、一方の列の型を INT から NUMERIC に更新しています。
CREATE TABLE mydataset.mytable(s1 STRUCT<a INT64, b STRING>); ALTER TABLE mydataset.mytable ALTER COLUMN s1 SET DATA TYPE STRUCT<a NUMERIC, b STRING>;
ネストされた列の型を変更する
STRUCT の配列内のフィールドの変更など、複雑なネストされたスキーマ変更の場合、ALTER TABLE DDL ステートメントはサポートされていません。回避策として、SELECT ステートメントで CREATE OR REPLACE TABLE ステートメントを使用して、ネストされたスキーマ変更を変換できます。
次の例は、STRUCTS の配列内の列を変換する方法を示しています。
次のスキーマとデータがあるテーブル samples.test について考えてみます。
CREATE OR REPLACE TABLE samples.test(D STRUCT <L ARRAY<STRUCT<R STRING, U STRING, V STRING>>, F STRING>); INSERT INTO samples.test(D) VALUES (STRUCT([STRUCT("r1", "u1", "v1"), STRUCT("r2", "u2", "v2")], "f1"));
結果は次のようになります。
+----------------------------------------------------------------------------+
| D |
+----------------------------------------------------------------------------+
| {"L":[{"R":"r1","U":"u1","V":"v1"},{"R":"r2","U":"u2","V":"v2"}],"F":"f1"} |
+----------------------------------------------------------------------------+
STRUCT のネストされた配列内のフィールド U の型を STRUCT<W STRING> に変更するとします。次の SQL ステートメントは、この方法を示しています。
CREATE OR REPLACE TABLE samples.new_table AS SELECT STRUCT(ARRAY( SELECT STRUCT(tmp.R, STRUCT(tmp.U AS W) AS U, tmp.V) FROM UNNEST(t.D.L) AS tmp) AS L, t.D.F) AS D FROM samples.test AS t
このステートメントは、ターゲット スキーマを使用して新しいテーブル samples.new_table を作成します。UNNEST 関数は、t.D.L 内の STRUCT の配列を展開します。式 STRUCT(tmp.U AS W) AS U は、フィールド W がある新しい STRUCT を構築し、元の U フィールドの値で入力します。結果のテーブル samples.new_table のスキーマとデータは次のとおりです。
+----------------------------------------------------------------------------------------+
| D |
+----------------------------------------------------------------------------------------+
| {"L":[{"R":"r1","U":{"W":"u1"},"V":"v1"},{"R":"r2","U":{"W":"u2"},"V":"v2"}],"F":"f1"} |
+----------------------------------------------------------------------------------------+
列のデータ型をキャストする
列のデータ型をキャスト可能型に変更するには、SQL クエリを使用してテーブルデータを選択し、関連する列のキャストを行い、テーブルを上書きします。テーブル全体のスキャンが必要になるため、非常に大きなテーブルではキャストと上書きはおすすめしません。
次の例は、mydataset.mytable の column_two と column_three のすべてのデータを選択し、column_one を DATE から STRING にキャストする SQL クエリを示しています。クエリ結果を使用して、既存のテーブルを上書きします。上書きされたテーブルには、column_one が STRING データ型として保存されます。
CAST を使用したときに、BigQuery がキャストできない場合はクエリが失敗します。GoogleSQL でのキャストルールの詳細については、キャスティングをご覧ください。
コンソール
Google Cloud コンソールで、[BigQuery] ページに移動します。
[クエリエディタ] で次のクエリを入力して、
mydataset.mytableのcolumn_twoとcolumn_threeのすべてのデータが選択され、column_oneがDATEからSTRINGにキャストされるようにします。クエリでは、エイリアスを使用してcolumn_oneを同じ名前でキャストします。mydataset.mytableはデフォルト プロジェクトにあります。SELECT column_two, column_three, CAST(column_one AS STRING) AS column_one FROM mydataset.mytable;
[展開] をクリックして、[クエリの設定] を選択します。
[送信先] セクションで、次の操作を行います。
[クエリ結果の宛先テーブルを設定する] を選択して、
[プロジェクト名] の値は、デフォルトのプロジェクトのままにします。これは
mydataset.mytableを含むプロジェクトです。[Dataset] で [
mydataset] を選択します。[テーブル ID] フィールドに「
mytable」と入力します。[宛先テーブルの書き込み設定] で、[テーブルを上書きする] を選択します。このオプションにより、クエリ結果を使用して
mytableが上書きされます。
必要に応じて、データの [ロケーション] を選択します。
設定を更新するには、[保存] をクリックします。
[実行] をクリックします。
クエリジョブが完了すると、
column_oneのデータ型はSTRINGになります。
bq
次の bq query コマンドを入力して、mydataset.mytable の column_two と column_three のすべてのデータが選択され、column_one が DATE から STRING にキャストされるようにします。クエリでは、エイリアスを使用して column_one を同じ名前でキャストします。mydataset.mytable はデフォルト プロジェクトにあります。
--destination_table フラグを使用してクエリ結果を mydataset.mytable に書き込み、--replace フラグを使用して mytable を上書きします。GoogleSQL 構文を使用するには、use_legacy_sql=false フラグを指定します。
必要に応じて、--location フラグを指定して、その値をロケーションに設定します。
bq query \
--destination_table mydataset.mytable \
--replace \
--use_legacy_sql=false \
'SELECT
column_two,
column_three,
CAST(column_one AS STRING) AS column_one
FROM
mydataset.mytable'
API
mydataset.mytable の column_two と column_three のすべてのデータを選択し、column_one を DATE から STRING にキャストするには、jobs.insert メソッドを呼び出して query ジョブを構成します。(省略可)jobReference セクションにある location プロパティでロケーションを指定します。
クエリジョブで使用される SQL クエリは、SELECT column_two,
column_three, CAST(column_one AS STRING) AS column_one FROM
mydataset.mytable のようになります。クエリでは、エイリアスを使用して column_one を同じ名前でキャストします。
mytable をクエリ結果で上書きするには、configuration.query.destinationTable プロパティに mydataset.mytable を含め、configuration.query.writeDisposition プロパティに WRITE_TRUNCATE を指定します。
列のモードを変更する
現在、列のモードに対してサポートされている唯一の変更は、REQUIRED から NULLABLE に変更することです。列のモードを REQUIRED から NULLABLE に変更することは、列緩和とも呼ばれます。データを読み込んで既存のテーブルを上書きするときや、既存のテーブルにデータを追加するときにも、列を緩和できます。列のモードを NULLABLE から REQUIRED に変更することはできません。
既存のテーブルに列 NULLABLE を作成する
列のモードを REQUIRED から NULLABLE に変更するには、次のいずれかのオプションを選択します。
コンソール
[BigQuery] ページに移動します。
左側のペインで、 [エクスプローラ] をクリックします。

[エクスプローラ] ペインでプロジェクトを開き、[データセット] をクリックして、データセットを選択します。
[概要 > テーブル] をクリックし、テーブルを選択します。
詳細パネルで [スキーマ] タブをクリックします。
[スキーマを編集] をクリックします。このボタンを表示するには、スクロールが必要な場合があります。
[現在のスキーマ] ページで、変更するフィールドを特定します。
そのフィールドの [モード] プルダウン リストで、
NULLABLEを選択します。設定を更新するには、[保存] をクリックします。
SQL
ALTER COLUMN DROP NOT NULL DDL ステートメントを使用します。次の例では、列 mycolumn のモードを REQUIRED から NULLABLE に変更します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
ALTER TABLE mydataset.mytable ALTER COLUMN mycolumn DROP NOT NULL;
[実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
まず、
--schemaフラグを指定したbq showコマンドを発行して、既存のテーブル スキーマをファイルに書き込みます。更新するテーブルがデフォルト以外のプロジェクトにある場合は、PROJECT_ID:DATASETの形式でプロジェクト ID をデータセット名に追加します。bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA_FILE
次のように置き換えます。
PROJECT_ID: プロジェクト ID。DATASET: 更新するテーブルを含むデータセットの名前。TABLE: 更新するテーブルの名前。SCHEMA_FILE: ローカルマシンに書き込まれるスキーマ定義ファイル。
たとえば、
mydataset.mytableのスキーマ定義をファイルに書き込むには、次のコマンドを入力します。mydataset.mytableはデフォルト プロジェクトにあります。bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.jsonスキーマ ファイルをテキスト エディタで開きます。スキーマは次のようになっています。
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]既存の列のモードを
REQUIREDからNULLABLEに変更します。この例では、column1のモードを緩和しています。[ { "mode": "NULLABLE", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]JSON スキーマ ファイルの操作の詳細については、JSON スキーマ ファイルの指定をご覧ください。
スキーマ ファイルを更新したら、次のコマンドを発行してテーブルのスキーマを更新します。更新するテーブルがデフォルト以外のプロジェクトにある場合は、
PROJECT_ID:DATASETの形式でプロジェクト ID をデータセット名に追加します。bq update PROJECT_ID:DATASET.TABLE SCHEMA
次のように置き換えます。
PROJECT_ID: プロジェクト ID。DATASET: 更新するテーブルを含むデータセットの名前。TABLE: 更新するテーブルの名前。SCHEMA: ローカルマシン上の JSON スキーマ ファイルへのパス
たとえば、次のコマンドを入力すると、デフォルト プロジェクトにある
mydataset.mytableのスキーマ定義が更新されます。ローカルマシン上にあるスキーマ ファイルへのパスは/tmp/myschema.jsonです。bq update mydataset.mytable /tmp/myschema.json
API
tables.patch を呼び出し、schema プロパティを使用してスキーマ定義の中の REQUIRED 列を NULLABLE に変更します。tables.update メソッドはテーブル リソース全体を置き換えるため、tables.patch メソッドの方が適切です。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
mode プロパティを'NULLABLE' に設定した SchemaField オブジェクトのリストで、Table.schema プロパティを上書きします。
追記の読み込みジョブを使用して列を NULLABLE にする
読み込みジョブでテーブルにデータを追記するときに、列のモードを緩和できます。ファイルの種類に応じて、次のいずれかを選択します。
- CSV ファイルと JSON ファイルのデータを追加するときに、JSON スキーマ ファイルを指定して個々の列のモードを緩和します。
- Avro、ORC、Parquet のファイルからデータを追記するときは、スキーマ内の
NULLに列を緩和し、緩和された列がスキーマ推論によって検出されるようにします。
読み込みジョブ中にテーブルにデータを追記する際に列を REQUIRED から NULLABLE に緩和するには、次のいずれかのオプションを選択します。
コンソール
Google Cloud コンソールを使用して列のモードを緩和することはできません。
bq
bq load コマンドを使用してデータを読み込み、--noreplace フラグを指定して、データを既存のテーブルに追記していることを示します。
追記するデータが CSV 形式または改行区切りの JSON 形式である場合は、ローカル JSON スキーマ ファイルで緩和した列を指定します。あるいは、緩和した列がソースデータ内で検出されるように、--autodetect フラグでスキーマの検出を使用します。
Avro、ORC、Parquet ファイルから読み込む場合、緩和した列は自動的に推定されます。列緩和は、Datastore エクスポートの追記には適用されません。Datastore エクスポート ファイルの読み込みによって作成されたテーブル内の列は常に NULLABLE です。
--schema_update_option フラグを ALLOW_FIELD_RELAXATION に設定して、追記しているデータに緩和した列が含まれていることを示します。
追記するテーブルがデフォルト以外のプロジェクトのデータセットにある場合は、PROJECT_ID:DATASET の形式でプロジェクト ID をデータセット名に追加します。
(省略可)--location フラグを指定して、その値をロケーションに設定します。
load コマンドを次のように入力します。
bq --location=LOCATION load \ --noreplace \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
次のように置き換えます。
LOCATION: ロケーションの名前。--locationフラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値をasia-northeast1に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。FORMAT:NEWLINE_DELIMITED_JSON、CSV、PARQUET、ORC、AVRO。DATASTORE_BACKUPファイルでは列緩和は必要ありません。Datastore エクスポート ファイルから作成されたテーブルの列は常にNULLABLEです。PROJECT_ID: プロジェクト ID。dataset は、テーブルを含むデータセットの名前です。TABLE: 追記するテーブルの名前。PATH_TO_SOURCE: 完全修飾の Cloud Storage URI、URI のカンマ区切りのリスト、またはローカルマシン上のデータファイルのパス。SCHEMA: ローカルの JSON スキーマ ファイルのパス。このオプションは、CSV ファイルと JSON ファイルに対してのみ使用します。Avro ファイルから読み込まれたデータでは、緩和した列は自動的に推定されます。
例:
次のコマンドを入力して、ローカル Avro データファイル /tmp/mydata.avro を mydataset.mytable に、読み込みジョブを使用して追記します。緩和された列は Avro データから自動的に推定できるため、スキーマ ファイルを指定する必要はありません。mydataset はデフォルト プロジェクトにあります。
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
次のコマンドを入力して、Cloud Storage の改行区切りの JSON ファイルのデータを mydataset.mytable に、読み込みジョブを使用して追記します。緩和された列を含むスキーマは、ローカル JSON スキーマ ファイル /tmp/myschema.json 内にあります。mydataset はデフォルト プロジェクトにあります。
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
次のコマンドを入力して、ローカルマシン上の CSV ファイルのデータを mydataset.mytable に、読み込みジョブを使用して追記します。このコマンドは、スキーマの自動検出機能を使用して、ソースデータ内の緩和した列を検出します。mydataset はデフォルト プロジェクトではなく myotherproject にあります。
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=CSV \
--autodetect \
myotherproject:mydataset.mytable \
mydata.csv
API
jobs.insert メソッドを呼び出します。load ジョブを構成し、次のプロパティを設定します。
sourceUrisプロパティを使用して、Cloud Storage 内のデータを参照します。sourceFormatプロパティを設定して、データ形式を指定します。schemaプロパティでスキーマを指定します。schemaUpdateOptionsプロパティを使用して、スキーマ更新オプションを指定します。writeDispositionプロパティを使用して、宛先テーブルの書き込み処理をWRITE_APPENDに設定します。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
追加ジョブですべての列を NULLABLE にする
クエリ結果をテーブルに追加するときに、そのテーブル内のすべての列を緩和できます。--schema_update_option フラグを ALLOW_FIELD_RELAXATION に設定すると、宛先テーブル内のすべての必須フィールドを緩和できます。クエリ追記を使用して宛先テーブル内の個々の列を緩和することはできません。読み込み追加ジョブで個々の列を緩和するには、追加ジョブで列を NULLABLE にするをご覧ください。
宛先テーブルにクエリ結果を追記するときにすべての列を緩和するには、次のいずれかのオプションを選択します。
コンソール
Google Cloud コンソールを使用して列のモードを緩和することはできません。
bq
bq query コマンドを使用してデータに対するクエリを実行し、--destination_table フラグを指定してどのテーブルを追記しているかを示します。
クエリ結果を既存の宛先テーブルに追記していることを指定するには、--append_table フラグを指定します。
--schema_update_option フラグを ALLOW_FIELD_RELAXATION に設定して、追記しているテーブル内のすべての REQUIRED 列を NULLABLE に変更するように指示します。
クエリに GoogleSQL 構文を使用するには、use_legacy_sql=false フラグを指定します。
追記するテーブルがデフォルト以外のプロジェクトのデータセットにある場合は、PROJECT_ID:DATASET の形式でプロジェクト ID をデータセット名に追加します。
(省略可)--location フラグを指定して、その値をロケーションに設定します。
bq --location=LOCATION query \ --destination_table PROJECT_ID:DATASET.TABLE \ --append_table \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --use_legacy_sql=false \ 'QUERY'
次のように置き換えます。
LOCATION: ロケーションの名前。--locationフラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値をasia-northeast1に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。PROJECT_ID: プロジェクト ID。DATASET: 追記するテーブルを含むデータセットの名前。TABLE: 追記するテーブルの名前。QUERY: GoogleSQL 構文のクエリ。
例:
次のコマンドを入力して、デフォルト プロジェクトで mydataset.mytable のクエリを実行し、クエリ結果を mydataset.mytable2(およびデフォルト プロジェクト)に追記します。このコマンドは、宛先テーブル内のすべての REQUIRED 列を NULLABLE に変更します。
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
次のコマンドを入力して、デフォルト プロジェクトで mydataset.mytable のクエリを実行でき、クエリ結果を myotherproject の mydataset.mytable2 に追記できます。このコマンドは、宛先テーブル内のすべての REQUIRED 列を NULLABLE に変更します。
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
jobs.insert メソッドを呼び出します。query ジョブを構成し、次のプロパティを設定します。
destinationTableプロパティを使用して宛先テーブルを指定します。writeDispositionプロパティを使用して、宛先テーブルの書き込み処理をWRITE_APPENDに設定します。schemaUpdateOptionsプロパティを使用して、スキーマ更新オプションを指定します。queryプロパティを使用して GoogleSQL クエリを指定します。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
列のデフォルト値を変更する
列のデフォルト値を変更するには、次のいずれかのオプションを選択します。
コンソール
Google Cloud コンソールで、[BigQuery] ページに移動します。
左側のペインで、 [エクスプローラ] をクリックします。

左側のペインが表示されていない場合は、 左側のペインを開くをクリックしてペインを開きます。
[エクスプローラ] ペインでプロジェクトを開き、[データセット] をクリックして、データセットを選択します。
[概要 > テーブル] をクリックし、テーブルをクリックします。
[スキーマ] タブをクリックします。
[スキーマを編集] をクリックします。このボタンを表示するには、スクロールが必要な場合があります。
[現在のスキーマ] ページで、変更するトップレベル フィールドを見つけます。
そのフィールドのデフォルト値を入力します。
[保存] をクリックします。
SQL
ALTER COLUMN SET DEFAULT DDL ステートメントを使用します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
ALTER TABLE mydataset.mytable ALTER COLUMN column_name SET DEFAULT default_expression;
[実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
列の説明を変更する
列の説明を変更するには、次のいずれかのオプションを選択します。
コンソール
Google Cloud コンソールで、[BigQuery] ページに移動します。
左側のペインで、 [エクスプローラ] をクリックします。

[エクスプローラ] ペインでプロジェクトを開き、[データセット] をクリックして、データセットを選択します。
[概要 > テーブル] をクリックし、テーブルを選択します。
詳細パネルで [スキーマ] タブをクリックします。
[スキーマを編集] をクリックします。このボタンを表示するには、スクロールが必要な場合があります。
[現在のスキーマ] ページで、変更するフィールドを特定します。
そのフィールドの説明を入力します。
[保存] をクリックします。
SQL
ALTER COLUMN SET OPTIONS DDL ステートメントを使用します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
ALTER TABLE mydataset.mytable ALTER COLUMN column_name SET OPTIONS (description = 'This is a column description.');
[実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
Gemini
データ分析情報を使用して、Gemini in BigQuery で列の説明を生成できます。データ分析情報を使用すると、データを自動的に探索、理解、キュレートできます。
データ分析情報の詳細(設定手順、必要な IAM ロール、生成された分析情報の精度を高めるためのベスト プラクティスなど)については、BigQuery でデータ分析情報を生成するをご覧ください。
Google Cloud コンソールで、[BigQuery] ページに移動します。
左側のペインで、 [エクスプローラ] をクリックします。

[エクスプローラ] ペインで、プロジェクトとデータセットを開いて、テーブルを選択します。
詳細パネルで [スキーマ] タブをクリックします。
[生成] をクリックします。
Gemini は、列の説明とテーブルに関する分析情報を生成します。情報が入力されるまで数分かかります。生成された分析情報は、テーブルの [分析情報] タブで確認できます。
生成された列の説明を編集して保存する手順は次のとおりです。
[列の説明を表示] をクリックします。
[列の説明] セクションで、[スキーマに保存] をクリックします。
生成された列の説明は、各列の [新しい説明] フィールドに入力されます。
必要に応じて列の説明を編集し、[保存] をクリックします。
列の説明はすぐに更新されます。
[プレビューの説明] パネルを閉じるには、[閉じる] をクリックします。
列を削除する
既存のテーブルから列を削除するには、ALTER TABLE DROP COLUMN DDL ステートメントを使用します。
このステートメントは、削除された列に関連付けられているストレージをすぐには解放しません。ストレージに関する列を削除するときにストレージが受ける影響については、ALTER TABLE DROP COLUMN ステートメントの詳細をご覧ください。ストレージをすぐに再利用するには、次の 2 つの方法があります。
SELECT * EXCEPTクエリを使用してテーブルを上書きします。CREATE OR REPLACE TABLE mydataset.mytable AS ( SELECT * EXCEPT (column_to_delete) FROM mydataset.mytable );データを Cloud Storage にエクスポートし、不要な列を削除してから、正しいスキーマを持つ新しいテーブルにデータを読み込みます。