テーブルを管理する
このドキュメントでは、BigQuery でテーブルを管理する方法について説明します。BigQuery のテーブルの管理タスクには以下のようなものがあります。
テーブル情報の取得、テーブルの一覧表示、テーブルデータへのアクセス制御など、テーブルの作成と使用の詳細については、テーブルの作成と使用をご覧ください。
始める前に
このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。タスクの実行に必要な権限(存在する場合)は、タスクの「必要な権限」セクションに記載されています。
テーブルのプロパティを更新する
テーブルの次の要素を更新できます。
必要な権限
テーブルのプロパティの更新に必要な権限を取得するには、テーブルに対するデータ編集者(roles/bigquery.dataEditor
)IAM ロールを付与するよう管理者に依頼してください。
ロールの付与の詳細については、アクセス権の管理に関する記事をご覧ください。
この事前定義ロールには、テーブルのプロパティの更新に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
テーブルのプロパティを更新するには、次の権限が必要です。
-
bigquery.tables.update
-
bigquery.tables.get
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
また、bigquery.datasets.create
権限がある場合は、作成したデータセットのテーブルのプロパティを更新できます。
テーブルの説明を更新する
テーブルの説明は次の方法で更新できます。
- Google Cloud コンソールを使用する。
ALTER TABLE
データ定義言語(DDL)ステートメントを使用する。- bq コマンドライン ツールの
bq update
コマンドを使用する。 tables.patch
API メソッドを呼び出す。- クライアント ライブラリを使用する。
テーブルの説明を更新するには:
コンソール
Google Cloud コンソールを使用してテーブルを作成する場合、説明を追加することはできません。説明は、テーブルの作成後に [詳細] ページで追加できます。
[エクスプローラ] パネルで、プロジェクトとデータセットを開いて、テーブルを選択します。
詳細パネルで、[詳細] をクリックします。
[説明] セクションの鉛筆アイコンをクリックして、説明を編集します。
ボックスに説明を入力し、[更新] をクリックして保存します。
SQL
ALTER TABLE SET OPTIONS
ステートメントを使用します。次の例は、mytable
という名前のテーブルの説明を更新します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
ALTER TABLE mydataset.mytable SET OPTIONS ( description = 'Description of mytable');
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
--description
フラグを指定してbq update
コマンドを発行します。更新するテーブルがデフォルト プロジェクト以外のプロジェクトにある場合は、project_id:dataset
の形式でプロジェクト ID をデータセット名に追加します。bq update \ --description "description" \ project_id:dataset.table
次のように置き換えます。
description
: テーブルの説明テキストproject_id
: プロジェクト IDdataset
: 更新するテーブルを含むデータセットの名前table
: 更新するテーブルの名前
例:
mydataset
データセットのmytable
テーブルの説明を「Description of mytable」に変更するには、次のコマンドを入力します。mydataset
データセットはデフォルト プロジェクトにあります。bq update --description "Description of mytable" mydataset.mytable
mydataset
データセットのmytable
テーブルの説明を「Description of mytable」に変更するには、次のコマンドを入力します。mydataset
データセットは、デフォルト プロジェクトではなくmyotherproject
プロジェクトにあります。bq update \ --description "Description of mytable" \ myotherproject:mydataset.mytable
API
tables.patch
メソッドを呼び出し、テーブル リソースの description
プロパティを使用して、テーブルの説明を更新します。tables.update
メソッドはテーブル リソース全体を置き換えるため、tables.patch
メソッドの方が適切です。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Table.description プロパティを構成し、Client.update_table() を呼び出して API に更新を送信します。テーブルの有効期限を更新する
データセット レベルでデフォルトのテーブル有効期限を設定できます。また、テーブルの作成時にテーブルの有効期限を設定することもできます。テーブルの有効期限は有効期間(TTL)と呼ばれることもあります。
テーブルが期限切れになると、テーブル内のすべてのデータとともに、テーブルが削除されます。必要な場合は、データセットに指定されたタイムトラベル期間内に期限切れのテーブルの削除を取り消すことができます。詳細については、削除されたテーブルの復元をご覧ください。
テーブルの作成時に有効期限を設定した場合、データセットのデフォルトのテーブル有効期限は無視されます。データセット レベルでデフォルトのテーブル有効期限を設定せず、テーブルの作成時にもテーブル有効期限を設定しなかった場合、テーブルは無期限に有効になります。このようなテーブルは手動で削除する必要があります。
テーブルを作成した後、テーブルの有効期限を次の方法でいつでも更新できます。
- Google Cloud コンソールを使用する。
ALTER TABLE
データ定義言語(DDL)ステートメントを使用する。- bq コマンドライン ツールの
bq update
コマンドを使用する。 tables.patch
API メソッドを呼び出す。- クライアント ライブラリを使用する。
テーブルの有効期限を更新するには:
コンソール
Google Cloud コンソールを使用してテーブルを作成するときに有効期限を追加することはできません。テーブルを作成した後、[テーブル詳細] ページでテーブルの有効期限を追加または更新できます。
[エクスプローラ] パネルで、プロジェクトとデータセットを開いて、テーブルを選択します。
詳細パネルで、[詳細] をクリックします。
[テーブル情報] の横にある鉛筆アイコンをクリックします。
[テーブルの有効期限] で [日付を指定] を選択します。次に、カレンダー ウィジェットで有効期限を選択します。
[更新] をクリックして保存します。更新された有効期限が [テーブル情報] セクションに表示されます。
SQL
ALTER TABLE SET OPTIONS
ステートメントを使用します。次の例では、mytable
という名前のテーブルの有効期限を更新します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
ALTER TABLE mydataset.mytable SET OPTIONS ( -- Sets table expiration to timestamp 2025-02-03 12:34:56 expiration_timestamp = TIMESTAMP '2025-02-03 12:34:56');
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
--expiration
フラグを指定してbq update
コマンドを発行します。更新するテーブルがデフォルト プロジェクト以外のプロジェクトにある場合は、project_id:dataset
の形式でプロジェクト ID をデータセット名に追加します。bq update \ --expiration integer \
project_id:dataset.table
次のように置き換えます。
integer
: テーブルのデフォルトの存続期間(秒)です。最小値は 3,600 秒(1 時間)です。現在時刻にこの整数値を足した値が有効期限になります。0
を指定すると、テーブルの有効期限が削除され、テーブルは無期限に有効になります。有効期限のないテーブルは手動で削除する必要があります。project_id
: プロジェクト ID。dataset
: 更新するテーブルを含むデータセットの名前。table
: 更新するテーブルの名前。
例:
mydataset
データセットのmytable
テーブルの有効期限を 5 日(432,000 秒)に更新するには、次のコマンドを入力します。mydataset
データセットはデフォルト プロジェクトにあります。bq update --expiration 432000 mydataset.mytable
mydataset
データセットのmytable
テーブルの有効期限を 5 日(432,000 秒)に更新するには、次のコマンドを入力します。mydataset
データセットは、デフォルト プロジェクトではなくmyotherproject
プロジェクトにあります。bq update --expiration 432000 myotherproject:mydataset.mytable
API
tables.patch
メソッドを呼び出し、テーブル リソースの expirationTime
プロパティを使用して、テーブルの有効期限(ミリ秒単位)を更新します。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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Table.expires プロパティを構成し、Client.update_table() を呼び出して API に更新を送信します。データセットのデフォルトのパーティション有効期限を更新するには:
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
テーブルの丸めモードを更新する
ALTER TABLE SET OPTIONS
DDL ステートメントを使用して、テーブルのデフォルトの丸めモードを更新できます。次の例では、mytable
のデフォルトの丸めモードを ROUND_HALF_EVEN
に更新します。
ALTER TABLE mydataset.mytable SET OPTIONS ( default_rounding_mode = "ROUND_HALF_EVEN");
NUMERIC
または BIGNUMERIC
フィールドをテーブルに追加し、丸めモードを指定しないと、丸めモードは自動的にテーブルのデフォルトの丸めに設定されます。テーブルのデフォルトの丸めモードを変更しても、既存のフィールドの丸めモードは変更されません。
テーブルのスキーマ定義を更新する
テーブルのスキーマ定義の更新方法については、テーブル スキーマの変更をご覧ください。
テーブルの名前を変更する
テーブルを作成した後にテーブルの名前を変更するには、ALTER TABLE RENAME TO
ステートメントを使用します。次の例では、mytable
の名前を mynewtable
に変更します。
ALTER TABLE mydataset.mytable
RENAME TO mynewtable;
テーブル名の変更に関する制限
- データ ストリーミングを含むテーブルの名前を変更する場合は、ストリーミングを停止して、BigQuery がストリーミングを使用していないことを示すまで待つ必要があります。
- 通常、テーブルの名前は最後のストリーミング オペレーションから 72 時間以内に変更されますが、それ以上かかる場合もあります。
- 既存のテーブル ACL と行アクセス ポリシーは保持されますが、テーブル名の変更中に行われたテーブル ACL と行アクセス ポリシーの更新は保持されません。
- テーブルの名前を変更して、そのテーブルで DML ステートメントを同時に実行することはできません。
- テーブルの名前を変更すると、テーブルのすべての Data Catalog タグが削除されます。
- 外部テーブルの名前は変更できません。
テーブルをコピーする
このセクションでは、テーブルの完全なコピーを作成する方法について説明します。他のタイプのテーブルのコピーについては、テーブル クローンとテーブル スナップショットをご覧ください。
次の方法でテーブルをコピーできます。
- Google Cloud コンソールを使用する。
bq cp
コマンドを使用する。CREATE TABLE COPY
データ定義言語(DDL)ステートメントを送信する。- jobs.insert API メソッドを呼び出して、
copy
ジョブを構成する。 - クライアント ライブラリを使用する。
テーブルのコピーに関する制限事項
テーブルのコピージョブには以下の制限があります。
- テーブルをコピーするとき、コピー先テーブルの名前は、テーブルの作成時と同じ命名規則に従う必要があります。
- テーブルのコピーは、コピージョブに関する BigQuery の上限が適用されます。
- Google Cloud コンソールでは、一度に 1 つのテーブルのみをコピーできます。コピー先データセット内の既存のテーブルを上書きすることはできません。コピーするテーブルには、コピー先データセット内で一意の名前を付ける必要があります。
- Google Cloud コンソールでは、複数のテーブルを 1 つのテーブルにコピーすることはできません。
API、bq コマンドライン ツール、またはクライアント ライブラリで複数のテーブルを 1 つのテーブルにコピーする場合は、すべてのコピー元テーブルで同一のスキーマ(パーティショニングやクラスタリングなど)が使用されている必要があります。
列の削除や名前変更など、特定のテーブル スキーマの更新を行うと、テーブルのスキーマは同じに見えても、内部表現が変わっていることがあります。これにより、テーブルのコピージョブがエラー
Maximum limit on diverging physical schemas reached
で失敗する可能性があります。この場合、CREATE TABLE LIKE
ステートメントを使用すると、ソーステーブルのスキーマを宛先テーブルのスキーマと完全に一致させることができます。BigQuery では、基盤となるストレージが動的に管理されるため、テーブルのコピーにかかる時間が大きく異なる場合があります。
コピー元のテーブルよりも列数が多く、追加された列がデフォルト値を持つコピー先テーブルに、コピー元テーブルをコピーして追加することはできません。代わりに、
INSERT destination_table SELECT * FROM source_table
を実行してデータをコピーできます。コピー オペレーションが既存のテーブルを上書きする場合は、既存のテーブルに対するテーブルレベルのアクセスが維持されます。ソーステーブルのタグは、上書きされるテーブルにコピーされません。
コピー オペレーションによって新しいテーブルが作成される場合、新しいテーブルに対するテーブルレベルのアクセス権は、新しいテーブルが作成されるデータセットのアクセス ポリシーによって決まります。さらに、ソーステーブルから新しいテーブルにタグがコピーされます。
複数のコピー元テーブルを 1 つのコピー先テーブルにコピーする場合は、すべてのコピー元テーブルに同じタグを設定する必要があります。
必要なロール
このドキュメントのタスクを実行するには、次の権限が必要です。
テーブルとパーティションをコピーするロール
テーブルとパーティションのコピーに必要な権限を取得するには、コピー元データセットとコピー先データセットに対するデータ編集者(roles/bigquery.dataEditor
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理に関する記事をご覧ください。
この事前定義ロールには、テーブルとパーティションのコピーに必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
テーブルとパーティションをコピーするには、次の権限が必要です。
- ソース データセットとコピー先データセットに対する
bigquery.tables.getData
- ソース データセットとコピー先データセットに対する
bigquery.tables.get
- コピー先データセットに対する
bigquery.tables.create
- コピー先データセットに対する
bigquery.tables.update
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
コピージョブを実行する権限
コピージョブを実行するために必要な権限を取得するには、コピー元データセットとコピー先データセットに対してジョブユーザー(roles/bigquery.jobUser
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理に関する記事をご覧ください。
この事前定義ロールには、コピージョブを実行するために必要な bigquery.jobs.create
権限が含まれています。
カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。
単一ソースのテーブルをコピーする
次の方法で 1 つのテーブルをコピーできます。
- Google Cloud コンソールを使用する。
- bq コマンドライン ツールの
bq cp
コマンドを使用する。 CREATE TABLE COPY
データ定義言語(DDL)ステートメントを使用する。jobs.insert
API メソッドを呼び出して、copy
ジョブを構成し、sourceTable
プロパティを指定する。- クライアント ライブラリを使用する。
Google Cloud コンソールと CREATE TABLE COPY
ステートメントを使用する場合、コピージョブでサポートされるのは、コピー元テーブルとコピー先テーブル、それぞれ 1 つのみです。複数のファイルを 1 つのテーブルにコピーするには、bq コマンドライン ツールまたは API を使用する必要があります。
1 つのテーブルをコピーするには:
Console
[エクスプローラ] パネルで、プロジェクトとデータセットを開いて、テーブルを選択します。
詳細パネルで [テーブルをコピー] をクリックします。
[テーブルのコピー] ダイアログの [コピー先] で次の操作を行います。
[コピー] をクリックして、コピージョブを開始します。
SQL
CREATE TABLE COPY
ステートメントを使用して、table1
という名前のテーブルを table1copy
という名前の新しいテーブルにコピーします。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE TABLE
myproject.mydataset.table1copy
COPYmyproject.mydataset.table1
;[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
bq cp
コマンドを発行します。オプションのフラグを使用して、コピー先テーブルの書き込み処理を制御できます。-a
または--append_table
を指定すると、コピー元テーブルのデータがコピー先データセット内の既存のテーブルの末尾に追加されます。-f
または--force
を指定すると、コピー先データセット内の既存のテーブルが上書きされます。確認を求めるプロンプトは表示されません。-n
または--no_clobber
を指定すると、コピー先データセット内にテーブルが存在している場合にTable 'project_id:dataset.table' already exists, skipping.
というエラー メッセージが返されます。-n
を指定しなかった場合、デフォルトでは、コピー先テーブルを置き換えるかどうかを選択するプロンプトが表示されます。--destination_kms_key
には、顧客管理の Cloud KMS 鍵を指定します。これは、コピー先テーブルを暗号化する場合に使用します。
--destination_kms_key
はここでは説明しません。詳細については、Cloud Key Management Service 鍵によるデータの保護をご覧ください。コピー元またはコピー先のデータセットがデフォルト以外のプロジェクトにある場合は、
project_id:dataset
の形式でプロジェクト ID をデータセット名に追加します。(省略可)
--location
フラグを指定して、その値をロケーションに設定します。bq --location=location cp \ -a -f -n \
project_id:dataset.source_table
\project_id:dataset.destination_table
次のように置き換えます。
location
: ロケーションの名前。--location
フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値をasia-northeast1
に設定します。.bigqueryrc
ファイルを使用してロケーションのデフォルト値を設定できます。project_id
: プロジェクト ID。dataset
: コピー元データセットまたはコピー先データセットの名前。source_table
: コピーするテーブル。destination_table
: 宛先データセット内のテーブル名。
例:
mydataset.mytable
テーブルをmydataset2.mytable2
テーブルにコピーするには、次のコマンドを入力します。データセットは両方ともデフォルト プロジェクトにあります。bq cp mydataset.mytable mydataset2.mytable2
mydataset.mytable
テーブルをコピーして、同じ名前が付いたコピー先のテーブルを上書きするには、次のコマンドを入力します。コピー元データセットはデフォルト プロジェクトにあります。コピー先データセットは、myotherproject
プロジェクトにあります。-f
ショートカットが指定されているため、コピー先テーブルは確認プロンプトなしで上書きされます。bq cp -f \ mydataset.mytable \ myotherproject:myotherdataset.mytable
mydataset.mytable
テーブルのコピーで、コピー先データセットに同じ名前のテーブルがある場合にエラーを返すには、次のコマンドを入力します。コ