データセットを管理する
このドキュメントでは、データセットのコピー、別のロケーションでのデータセットの再作成、データセットの保護、データセットの削除、BigQuery で削除されたデータセットからのテーブルの復元を行う方法について説明します。
BigQuery 管理者は、アナリストが使用するテーブルやビューへのアクセスを整理して制御できます。データセットの詳細については、データセットの概要をご覧ください。
既存のデータセットの名前の変更や、データセットの作成後にデータセットを移動することはできません。データセット名を変更する代替手段として、データセットをコピーして、宛先データセットの名前を変更します。データセットを再配置するには、次のいずれかの方法を使用します。
- データセットを別のロケーションに再作成します。
- データセットのコピーを作成します。
必要なロール
このセクションでは、データセットの管理に必要なロールと権限について説明します。コピー元またはコピー先のデータセットが、コピーに使用するプロジェクトと同じプロジェクトにある場合、そのデータセットに対する追加の権限またはロールは必要ありません。
データセットの管理に必要な権限を取得するには、次に挙げる IAM ロールの付与を、管理者に依頼してください。
-
データセットをコピーする(ベータ版)。
-
コピー先プロジェクトに対する BigQuery 管理者(
roles/bigquery.admin
) -
コピー元データセットに対する BigQuery データ閲覧者(
roles/bigquery.dataViewer
) -
コピー先データセットに対する BigQuery データ編集者(
roles/bigquery.dataEditor
)
-
コピー先プロジェクトに対する BigQuery 管理者(
-
データセットを削除する:
プロジェクトに対する BigQuery データオーナー (
roles/bigquery.dataOwner
) -
削除されたデータセットを復元する:
プロジェクトに対する BigQuery 管理者(
roles/bigquery.admin
)
ロールの付与の詳細については、アクセス権の管理をご覧ください。
これらの事前定義ロールには、データセットを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
データセットを管理するには、次の権限が必要です。
-
データセットをコピーする:
-
コピー先プロジェクトに対する
bigquery.transfers.update
-
コピー先プロジェクトに対する
bigquery.jobs.create
-
コピー元とコピー先のデータセットに対する
bigquery.datasets.get
-
コピー元とコピー先のデータセットに対する
bigquery.tables.list
-
コピー先データセットに対する
bigquery.datasets.update
-
コピー先データセットに対する
bigquery.tables.create
-
コピー先プロジェクトに対する
-
データセットを削除する:
-
プロジェクトに対する
bigquery.datasets.delete
-
プロジェクトに対する
bigquery.tables.delete
-
プロジェクトに対する
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
BigQuery における IAM ロールと権限の詳細については、IAM の概要をご覧ください。
データセットのコピー
データの抽出、移動、BigQuery への再読み込みなしに、リージョン内またはリージョン間でのパーティション分割データを含むデータセットをコピーできます。BigQuery は、バックエンドで BigQuery Data Transfer Service を使用してデータセットをコピーします。データを転送する際のロケーションに関する考慮事項については、データのロケーションと転送をご覧ください。
データセット コピー構成ごとに、一度にアクティブにできる転送実行は 1 つだけです。追加の転送実行はキューに入れられます。Google Cloud コンソールを使用している場合は、繰り返しのコピーをスケジューリングし、BigQuery Data Transfer Service でメールまたは Pub/Sub 通知を構成できます。
制限事項
データセットをコピーする場合は、次の制限事項が適用されます。
ソース データセットから次のリソースはコピーできません。
- ビュー。
- 外部テーブル。
コピージョブがリージョン間で存在する場合、顧客管理の暗号鍵(CMEK)で暗号化されたテーブル。デフォルトの暗号化を使用したテーブルについては、リージョン間でコピーできます。
CMEK で暗号化されたテーブルを含む、同じリージョン内のすべての暗号化されたテーブルをコピーできます。
次のリソースをコピージョブのコピー先データセットとして使用することはできません。
- 書き込みに最適化されたストレージ。
コピージョブがリージョン間で存在する場合、CMEK で暗号化されたデータセット。
ただし、CMEK で暗号化されたテーブルは、同じリージョン内でコピーする場合、コピー先テーブルとして使用できます。
コピージョブ間の最小頻度は 12 時間です。
コピー先データセット内のパーティション分割テーブルへのデータの追加はサポートされていません。
コピー元データセットとコピー先データセットにテーブルが存在し、コピー元テーブルが最後にコピーが成功してから変更されていない場合、それはスキップされます。[コピー先テーブルを上書きする] チェックボックスが選択されていたとしても、コピー元テーブルはスキップされます。
コピー先データセット内のテーブルを切り捨てる場合、データセット コピージョブはコピージョブを開始する前に、コピー先データセット内のリソースに加えられた変更を検出しません。データセットのコピージョブは、コピー先データセットのすべてのデータ(テーブルとスキーマの両方を含む)を上書きします。
コピー先テーブルには、コピージョブの開始後にコピー元テーブルに加えられた変更が反映されない場合があります。
BigQuery Omni リージョンでは、データセットのコピーはサポートされていません。
データセットをコピーする
次のオプションのいずれかを選択します。
コンソール
コピー先データセットに対して BigQuery Data Transfer Service を有効にします。
必要なロールがあることを確認します。
Pub/Sub の転送実行通知を設定する場合は(これらの手順の後述のオプション 2)、
pubsub.topics.setIamPolicy
権限が必要です。メール通知のみを設定する場合は、Pub/Sub 権限は必要ありません。詳細については、BigQuery Data Transfer Service の実行通知をご覧ください。
コピー元データセットと同じリージョンまたは別のリージョンに BigQuery データセットを作成します。
オプション 1: BigQuery のコピー関数を使用する
1 回限りの転送を作成するには、BigQuery のコピー関数を使用します。
BigQuery ページに移動します。
[エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。
[データセット情報] セクションで、
[コピー] をクリックしてから、次のようにします。[データセット] フィールドで、新しいデータセットを作成するか、リストから既存のデータセット ID を選択します。
プロジェクト内のデータセット名は一意である必要があります。プロジェクトとデータセットは異なるリージョンに存在していてもかまいませんが、リージョンを越えたコピーができるのは一部のリージョンのみに限られます。
[ロケーション] フィールドに、コピー元データセットのロケーションが表示されます。
省略可: コピー先テーブルのデータとスキーマの両方をコピー元テーブルで上書きするには、[コピー先テーブルを上書きする] チェックボックスをオンにします。コピー元とコピー先の両方のテーブルは、同じパーティショニング スキーマを持つ必要があります。
データセットをコピーするには、[コピー] をクリックします。
オプション 2: BigQuery Data Transfer Service を使用する
定期的なコピーをスケジュールし、メールまたは Pub/Sub 通知を構成するには、Google Cloud コンソールで BigQuery Data Transfer Service を使用します。
[データ転送] ページに移動します。
[転送を作成] をクリックします。
[コピー元] リストで、[データセット コピー] を選択します。
[表示名] フィールドに、転送実行の名前を入力します。
[スケジュール オプション] セクションで、次の操作を行います。
[繰り返しの頻度] で、転送を実行する頻度のオプションを選択します。
[カスタム] を選択した場合は、カスタム頻度(たとえば、
every day 00:00
)を入力します。詳細については、スケジュールのフォーマットをご覧ください。[開始日と実行時間] に、転送を開始する日付と時刻を入力します。[すぐに開始可能] を選択した場合、このオプションは無効になります。
[転送先の設定] セクションで、転送データを保存するコピー先データセットを選択します。[新しいデータセットの作成] をクリックして、この転送用に選択する前に新しいデータセットを作成することもできます。
[データソースの詳細] に、次の情報を入力します。
- [コピー元データセット] に、コピーするデータセット ID を入力します。
- [コピー元プロジェクト] に、コピー元データセットのプロジェクト ID を入力します。
コピー先テーブルのデータとスキーマの両方をコピー元テーブルで上書きするには、[コピー先テーブルを上書きする] チェックボックスをオンにします。コピー元とコピー先の両方のテーブルは、同じパーティショニング スキーマを持つ必要があります。
省略可: [通知オプション] セクションで、次のようにします。
[保存] をクリックします。
bq
コピー先データセットに対して BigQuery Data Transfer Service を有効にします。
必要なロールがあることを確認します。
BigQuery データセットを作成するには、データセット作成フラグ
--dataset
とlocation
フラグとともにbq mk
コマンドを使用します。bq mk \ --dataset \ --location=LOCATION \ PROJECT:DATASET
次のように置き換えます。
LOCATION
: データセットをコピーするロケーションPROJECT
: ターゲット データセットのプロジェクト IDDATASET
: ターゲット データセットの名前
データセットをコピーするには、転送作成フラグ
--transfer_config
と--data_source
フラグとともにbq mk
コマンドを使用します。--data_source
フラグをcross_region_copy
に設定する必要があります。--data_source
フラグの有効な値の一覧については、コマンドライン ツール リファレンスの transfer-config フラグをご覧ください。bq mk \ --transfer_config \ --project_id=PROJECT \ --data_source=cross_region_copy \ --target_dataset=DATASET \ --display_name=NAME \ --params='PARAMETERS'
次のように置き換えます。
NAME
: コピージョブまたは転送構成の表示名PARAMETERS
: 転送構成のパラメータ(JSON 形式)データセット コピー構成のパラメータは次のものを含みます。
source_dataset_id
: コピーするコピー元データセットの IDsource_project_id
: コピー元データセットがあるプロジェクトの IDoverwrite_destination_table
: 前のコピーのテーブルを切り捨て、すべてのデータを更新できるオプションのフラグ
コピー元とコピー先の両方のテーブルは、同じパーティショニング スキーマを持つ必要があります。
次の例は、システムの環境に基づいたパラメータの形式を示しています。
Linux: 単一引用符を使用して JSON 文字列を囲みます。次に例を示します。
'{"source_dataset_id":"mydataset","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'
Windows コマンドライン: 二重引用符を使用して JSON 文字列を囲み、文字列内の二重引用符をバックスラッシュでエスケープします。次に例を示します。
"{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}"
PowerShell: 単一引用符を使用して JSON 文字列を囲み、文字列内の二重引用符をバックスラッシュでエスケープします。次に例を示します。
'{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}'
たとえば、次のコマンドは、
mydataset
というターゲット データセットと ID がmyproject
のプロジェクトを使用してMy Transfer
という名前のデータセット コピー構成を作成します。bq mk \ --transfer_config \ --project_id=myproject \ --data_source=cross_region_copy \ --target_dataset=mydataset \ --display_name='My Transfer' \ --params='{ "source_dataset_id":"123_demo_eu", "source_project_id":"mysourceproject", "overwrite_destination_table":"true" }'
API
コピー先データセットに対して BigQuery Data Transfer Service を有効にします。
必要なロールがあることを確認します。
BigQuery データセットを作成するには、定義済みのデータセット リソースを指定して
datasets.insert
メソッドを呼び出します。データセットをコピーするには、
projects.locations.transferConfigs.create
メソッドを使用し、TransferConfig
リソースのインスタンスを提供します。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Python の手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
pip install google-cloud-bigquery-datatransfer
を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
余分なストレージ コストがかからないようにするため、以前のデータセットを削除することを検討してください。
データセット コピージョブを表示する
Google Cloud コンソールで、データセットのコピージョブのステータスを確認し、詳細を表示するには、次のようにします。
Google Cloud コンソールで、[データ転送] ページに移動します。
転送の詳細を表示する転送を選択し、次のようにします。
[転送の詳細] ページで、転送実行を選択します。
更新するには、[
更新] をクリックします。
別のロケーションにデータセットを再作成する
データセットをあるロケーションから別のロケーションに手動で移動する手順は次のとおりです。
-
データセットと同じロケーションか、データセットのロケーションに含まれるロケーションの Cloud Storage バケットに、BigQuery テーブルからデータをエクスポートします。たとえば、データセットが「
EU
」マルチリージョン ロケーションにある場合は、EU の一部である「europe-west1
」ベルギーのロケーションにデータをエクスポートできます。BigQuery からのデータのエクスポートに対しては課金されませんが、エクスポートしたデータを Cloud Storage に保存する場合は課金の対象になります。BigQuery からのエクスポートには、エクスポート ジョブの上限が適用されます。
-
データを、Cloud Storage のエクスポート バケットから転送先の場所に作成した新しいバケットに、コピーまたは移動します。たとえば、
US
マルチリージョンからasia-northeast1
東京リージョンにデータを移動すると、東京で作成したバケットにデータが転送されます。Cloud Storage オブジェクトの転送について詳しくは、Cloud Storage ドキュメントのオブジェクトのコピー、名前変更、移動をご覧ください。リージョン間でデータを転送すると、Cloud Storage でネットワークの下り(外向き)料金が発生します。
-
新しいロケーションに新しい BigQuery データセットを作成し、Cloud Storage バケットから新しいデータセットにデータを読み込みます。
BigQuery へのデータの読み込みに対しては課金されませんが、Cloud Storage にデータを保存した場合は課金の対象となり、データまたはバケットを削除するまで料金が請求されます。読み込まれたデータを BigQuery に保存することについても、請求の対象になります。BigQuery へのデータの読み込みには、読み込みジョブの上限が適用されます。
また、Cloud Composer を使用して、大規模なデータセットをプログラムで移動し、コピーすることもできます。
Cloud Storage を使用した大量のデータセットの保存と移動について詳しくは、Cloud Storage とビッグデータの使用をご覧ください。
データセットを保護する
BigQuery でデータセットへのアクセスを制御するには、データセットへのアクセスの制御をご覧ください。データ暗号化の詳細については、保存データの暗号化をご覧ください。
データセットの削除
Google Cloud コンソールを使用してデータセットを削除すると、データセット内のテーブルとビュー(データを含む)も削除されます。bq コマンドライン ツールを使用してデータセットを削除する場合は、-r
フラグを使用してテーブルとビューを削除する必要があります。
データセットを削除するには、次のいずれかの方法を選択します。
コンソール
BigQuery ページに移動します。
[エクスプローラ] ペインでプロジェクトを開いて、データセットを選択します。
アクション オプションを開いて、[削除] をクリックします。
[データセットを削除する] ダイアログで、フィールドに「
delete
」と入力してから、[削除] をクリックします。
SQL
データセットを削除するには、DROP SCHEMA
DDL ステートメントを使用します。
次の例では、mydataset
という名前のデータセットを削除します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
DROP SCHEMA IF EXISTS mydataset;
デフォルトでは、これは空のデータセットを削除する場合にのみ機能します。データセットとそのすべてのコンテンツを削除するには、
CASCADE
キーワードを使用します。DROP SCHEMA IF EXISTS mydataset CASCADE;
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。
bq
--dataset
または -d
フラグを指定して(省略可能)、bq rm
コマンドを使用します。データセットにテーブルが含まれている場合は、-r
フラグを使用してデータセット内のすべてのテーブルを削除する必要があります。-r
フラグを使用する場合は、--dataset
フラグまたは -d
フラグを省略できます。
コマンドを実行すると、システムから確認を求められます。-f
フラグを使用すると、確認をスキップできます。
削除するテーブルがデフォルト プロジェクト以外のプロジェクトにある場合は、PROJECT_ID:DATASET
の形式でプロジェクト ID をデータセット名に追加します。
bq rm -r -f -d PROJECT_ID:DATASET
次のように置き換えます。
PROJECT_ID
: プロジェクト IDDATASET
: 削除するデータセットの名前。
例:
次のコマンドを入力して、mydataset
という名前のデータセットと、その中のすべてのテーブルをデフォルト プロジェクトから削除します。このコマンドでは -d
フラグを使用します。
bq rm -r -d mydataset
プロンプトが表示されたら、「y
」と入力して Enter キーを押します。
myotherproject
から mydataset
と含まれるすべてのテーブルを削除するには、次のコマンドを入力します。このコマンドではオプションの -d
フラグを使用していません。確認をスキップするために -f
フラグを使用しています。
bq rm -r -f myotherproject:mydataset
bq ls
コマンドを使用して、データセットが削除されたことを確認できます。
API
datasets.delete
メソッドを呼び出してデータセットを削除します。その際、データセット内のテーブルも削除するには、deleteContents
パラメータを true
に設定します。
C#
次のコードサンプルでは、空のデータセットを削除します。
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの C# の手順に沿って設定を行ってください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
pip install google-cloud-bigquery-datatransfer
を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
次のコードサンプルでは、データセットとそのすべてのコンテンツを削除します。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Go の手順に沿って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
pip install google-cloud-bigquery-datatransfer
を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
Java
次のコードサンプルでは、空のデータセットを削除します。
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
pip install google-cloud-bigquery-datatransfer
を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
次のコードサンプルでは、データセットとそのすべてのコンテンツを削除します。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Node.js の手順に沿って設定を行ってください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
pip install google-cloud-bigquery-datatransfer
を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
PHP
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの PHP の手順に沿って設定を行ってください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
pip install google-cloud-bigquery-datatransfer
を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Python の手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
pip install google-cloud-bigquery-datatransfer
を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
Ruby
次のコードサンプルでは、空のデータセットを削除します。
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Ruby の手順に沿って設定を行ってください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
pip install google-cloud-bigquery-datatransfer
を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
次のコードサンプルでは、データセットとそのすべてのコンテンツを削除します。
削除されたデータセットからテーブルを復元する
データセットの時間移動枠内であれば、削除されたデータセットからテーブルを復元できます。削除されたデータセットを復元するには、タイムテーブル デコレータを使用して、削除したデータセット内の各テーブルを新しく作成した空のデータセットにコピーします。ビュー、マテリアライズド ビュー、ルーティンなど、データセットに関連付けられている他のオブジェクトは手動で再作成する必要があります。
新しいデータセットを作成します。たとえば、次のコマンドは、
mydataset
という名前のデータセットを作成します。bq mk mydataset
元のデータセットと同じ場所に、同じ名前でデータセットを作成します。
エポックからのミリ秒の形式(たとえば、
1418864998000
)を使用して、元のデータセットが削除される前のタイムスタンプを選択します。1418864998000
の時点のoriginaldataset.table1
テーブルを新しいデータセットにコピーします。bq cp originaldataset.table1@1418864998000 mydataset.mytable
削除したデータセット内の各テーブルに対して手順 3 を繰り返します。
割り当て
コピーの割り当ての詳細については、コピージョブをご覧ください。コピージョブの使用状況は INFORMATION_SCHEMA
で確認できます。INFORMATION_SCHEMA.JOBS
ビューにクエリを実行する方法については、コピージョブの使用状況を取得するをご覧ください。
料金
リージョン間またはマルチリージョン間でコピーされたデータへのデータ下り(外向き)料金は、データ抽出料金と同じレートで請求されます。
BigQuery はリージョン間のコピーでデータを圧縮して送信するので、課金対象となるデータはデータセットの実際のサイズより小さくなる場合があります。詳細については、BigQuery の料金をご覧ください。
次のステップ
- データセットを作成する方法を学びます。
- データセットを更新する方法を学びます。