データセットのコピー

データを抽出して移動してから BigQuery に再読み込みする代わりに、データセットを同じリージョン内で、またはあるリージョンから別のリージョンにコピーできます。1 回だけコピーすることはもちろん、任意に指定した定期的なスケジュールでコピーすることも可能です。

始める前に

データセットのコピーを作成する前に、次のことを行います。

  • データセットのコピーには、BigQuery Data Transfer Service の機能を使用します。宛先データセットの Google Cloud プロジェクトで、BigQuery Data Transfer Service の有効化に必要なすべての操作が完了していることを確認します。
  • 従来の BigQuery ウェブ UI を使用して転送を作成する場合は、権限ウィンドウが表示されるように、ブラウザで bigquery.cloud.google.com からのポップアップを許可します。データセットのコピー(転送の一種)を管理するための BigQuery Data Transfer Service 権限をユーザーに与える必要があります。
  • コピー先データセットとして、コピー元データセットと同じリージョンまたは異なるリージョンに BigQuery データセットを作成します。データセットの作成時に、BigQuery データを保存するロケーションを指定します。データセットのコピーができるリージョンはまだ限られています(サポートされているリージョンをご覧ください)。データセット名はプロジェクトごとに一意である必要があります。
  • コピー元のデータセットの ID と、コピー元のプロジェクトの ID を探します。
  • Pub/Sub の転送実行通知を設定する場合は、pubsub.topics.setIamPolicy 権限が必要です。メール通知を設定するだけの場合、Pub/Sub の権限は必要ありません。詳細については、BigQuery Data Transfer Service の実行通知をご覧ください。
  • overwrite_destination_table フラグを使ってコピー時にコピー先のテーブルを上書きする場合は、どちらのテーブルにも同じパーティショニング スキーマが必要です。

必要な権限

データセットのコピーを作成する前に、その操作を行うユーザーに対して次の必要な BigQuery 権限が付与されていることを確認します。

  1. コピー転送を作成するための bigquery.transfers.update 権限。

  2. コピー元データセットに対する bigquery.tables.list 権限。

    bigquery.tables.list 権限は、以下の事前定義されたプロジェクト レベルの IAM 役割に含まれています。

    • bigquery.dataViewer
    • bigquery.dataEditor
    • bigquery.dataOwner
    • bigquery.metadataViewer
    • bigquery.user
  3. コピー先データセットに対する bigquery.tables.list 権限と bigquery.tables.create 権限。

    bigquery.tables.list 権限と bigquery.tables.create 権限は、以下の事前定義されたプロジェクト レベルの IAM 役割に含まれています。

    • bigquery.dataEditor
    • bigquery.dataOwner
  4. 事前定義されたプロジェクト レベルの IAM 役割の bigquery.admin には、データセットのコピーに必要なすべての権限が含まれています。BigQuery での IAM の役割の詳細については、アクセス制御をご覧ください。

データセットのコピーの設定

データセットのコピーを作成するには:

Console

オプション 1: [データセットをコピー] アイコンを使用する。

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

    BigQuery ウェブ UI に移動

  2. コピー元のデータセットの名前を選択します。

  3. [Copy Dataset] アイコンをクリックします。

    [データセットをコピー] アイコン。

  4. [データセットをコピー] ダイアログで、プロジェクト ID とコピー先データセットの ID を選択します。プロジェクトとデータセットは異なるリージョンに存在していてもかまいませんが、リージョンを越えたコピーができるのは一部のリージョンのみに限られます

  5. プロジェクト内のデータセット名は一意である必要があります。

  6. コピー先データセットのすべてのデータを更新(上書き)する場合は、[Overwrite destination table] チェックボックスをオンにします。テーブルとスキーマの両方が上書きされます。

    [Copy dataset] ダイアログ。

  7. 余分なストレージ コストがかからないようにするため、古いデータセットを削除することを検討してください。

オプション 2: [転送] UI を使用する。

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

    BigQuery ウェブ UI に移動

  2. [転送] をクリックします。

  3. [+ 転送を作成] をクリックします。

  4. [転送の作成] ページで、次の操作を行います。

    • [ソースタイプ] セクションの [ソース] で、[Dataset Copy] を選択します。

      転送のソース。

    • [転送構成名] セクションの [表示名] に、転送名(例: My Transfer)を入力します。転送名には、後で修正が必要になった場合に簡単に識別できる任意の名前を使用できます。

      転送名。

    • [スケジュール オプション] セクションで、[スケジュール] をデフォルト値([すぐに開始可能])のままにするか、[設定した時間に開始] をクリックします。

      • [繰り返しの頻度] で、転送を実行する頻度のオプションを選択します。次のオプションがあります。

        • 毎日(デフォルト)
        • 毎週
        • 毎月
        • カスタム
        • オンデマンド

        [毎日] 以外のオプションを選択した場合は、追加のオプションが利用可能です。たとえば、[毎週] を選択した場合、曜日を選択するためのオプションが表示されます。

      • [開始日と実行時間] に、転送を開始する日付と時刻を入力します。[すぐに開始可能] を選択した場合、このオプションは無効になります。

        転送スケジュール。

    • [宛先データセット] で、データを保存するために別のリージョンに作成したデータセットを選択します。

    • [ソース データセット] に、コピーするデータセットの名前を入力します。

    • [ソース プロジェクト] に、コピー元データセットが存在するプロジェクトの ID を入力します。

    • (省略可)コピー先データセットのすべてのデータを更新(上書き)する場合は、[コピー先テーブルを上書きする] チェックボックスをオンにします。テーブルとスキーマの両方が上書きされます。

      新しいデータセット コピー。

    • (省略可)[通知オプション] セクションで、次の操作を行います。

      • 切り替えボタンをクリックしてメール通知を有効にします。このオプションを有効にすると、転送の実行が失敗した場合、転送管理者にメール通知が送信されます。
      • [Pub/Sub トピックを選択してください] で、トピック名を選択するか、[トピックを作成する] をクリックしてトピックを作成します。このオプションで、Pub/Sub の転送実行通知を構成します。

      Pub/Sub トピック。

  5. [保存] をクリックします。

  6. 余分なストレージ コストがかからないようにするため、古いデータセットを削除することを検討してください。

従来の UI

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

    従来の BigQuery ウェブ UI に移動

  2. [Transfers] をクリックします。

  3. [Add Transfer] をクリックします。

  4. [New Transfer] ページで次の操作を行います。

    • [Source] で [Dataset Copy] を選択します。
    • [Display name] に転送名(例: My Dataset Copy)を入力します。表示名には、後で修正が必要になった場合に簡単に識別できる任意の名前を使用できます。
    • (省略可)[Schedule] では、デフォルト値の [Daily](作成時間から 24 時間ごと)のままにするか、[Edit] をクリックして時間を変更します。間隔を [Weekly]、[Monthly]、[Custom] に変更することもできます。[Custom] を選択すると、every 12 hours のような Cron と同様の時間を指定するよう求められます。最短許容時間は 12 時間です。

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

    • [Source dataset] に、コピー元データセットの名前を入力します。

    • [Source project] で、コピー元データセットが存在するプロジェクトを選択します。

      新しいデータセット コピー。

    • (省略可)[Advanced] セクションを展開し、転送の実行通知を構成します。

    • [Cloud Pub/Sub topic] に、Cloud Pub/Sub トピックの名前(例: projects/myproject/topics/mytopic)を入力します。

    • [Send email notifications] をオンにして、転送実行失敗のメール通知を許可します。

      Pub/Sub トピック。

  5. [Add] をクリックします。

  6. 余分なストレージ コストがかからないようにするため、古いデータセットを削除することを検討してください。

bq

bq mk コマンドを入力して、転送作成フラグ --transfer_config を指定します。次のフラグも必要です。

  • --project_id
  • --data_source
  • --target_dataset
  • --display_name
  • --params

    bq mk --transfer_config --project_id=PROJECT_ID --data_source=DATA_SOURCE --target_dataset=DATASET --display_name=NAME --params='PARAMETERS'
    

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

  • PROJECT_ID: Google Cloud プロジェクト ID。--project_id を指定しない場合は、デフォルトのプロジェクトが使用されます。
  • DATA_SOURCE: データソース cross_region_copy
  • DATASET: 転送構成の BigQuery ターゲット データセット。
  • NAME: コピージョブ(転送構成)の表示名。転送名には、後で修正が必要になった場合に簡単に識別できる任意の名前を使用できます。
  • PARAMETERS には、作成される転送構成のパラメータを JSON 形式で指定します(例: --params='{"param":"param_value"}')。データセットをコピーする場合は source_dataset_id パラメータと source_project_id パラメータを指定する必要があり、必要に応じて overwrite_destination_table パラメータを指定します。

データセット コピー構成のパラメータは次のとおりです。

  • source_dataset_id: コピーするデータセットの ID。
  • source_project_id: コピー元データセットがあるプロジェクトの ID。
  • (省略可)overwrite_destination_table: 以前のコピーのテーブルを切り捨て、すべてのデータを更新する場合は、このパラメータを使用します。

たとえば次のコマンドは、mydataset というコピー先データセットと myproject という ID のプロジェクトを使用して My Transfer という名前のデータセット コピー構成を作成します。

bq mk --transfer_config --project_id=myproject --data_source=cross_region_copy --target_dataset=123_demo_tokyo --display_name='My Dataset Copy' --params='{"source_dataset_id":"123_demo_eu","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'

API

projects.locations.transferConfigs.create メソッドを使用して、TransferConfig リソースのインスタンスを指定します。

データセット コピージョブの表示と更新

[転送] で、データセットのコピーの進行状況と詳細を見ることができます。

Console

コンソールの転送ボタン。

コンソールの転送詳細の表示。

データセット コピー更新ジョブは、ユーザーが指定したスケジュールで実行されるようスケジュールされます。これは構成可能です。デフォルトは 24 時間ごとです。新しい実行をすぐに実行する場合は、[その他] メニューをクリックし、[今すぐ更新] をクリックします。

データセット コピーの更新ボタン

従来の UI

従来の UI の転送ボタン。

データセット コピー更新ジョブは、ユーザーが指定したスケジュールで実行されるようスケジュールされます。これは構成可能です。デフォルトは 24 時間ごとです。新しいコピージョブを直ちに実行する場合は、[Refresh Now] をクリックします。

データセット コピーの更新ボタン

料金

データセットのコピーは、ベータ期間中は無料で利用できます。

一般提供時には、リージョン間でコピーされたデータに対して、Compute Engine ネットワークのリージョン間の下り(外向き)と同じ料金が適用されます。

リージョン間のコピーではデータを圧縮して送信するため、課金される GB 数はデータセットのサイズより小さくなる場合があります。

割り当てと制限

BigQuery でのデータセットのコピーには以下の制限が適用されます。各制限は、bq コマンドライン ツール、コンソール、従来の BigQuery ウェブ UI を使用して作成されるコピージョブに適用されます。また、copy-type jobs.insert API メソッドを使用してプログラムで送信されるコピージョブにも適用されます。

コピーされたデータには、BigQuery のストレージとクエリに関するすべての標準使用料金がかかります。詳細については、BigQuery の料金をご覧ください。

BigQuery データセットのコピーに対する制限は次のとおりです。

割り当て

リージョン内

同じリージョン内でのデータセットのコピーは、すべての BigQuery コピージョブと同じ割り当てに従います。

BigQuery でのテーブルのコピーには、以下の各上限が適用されます。これらの上限は、bq コマンドライン ツール、Cloud Console、従来の BigQuery ウェブ UI を使用してデータをコピーするときに自動的に作成されるジョブに適用されます。また、ジョブタイプとしてコピーを指定した jobs.insert API メソッドを使用してプログラムで送信されるコピージョブにも適用されます。

  • 宛先テーブルごとの 1 日あたりコピージョブ数 - 1,000(失敗を含む)
  • プロジェクトごとの 1 日あたりのコピージョブ数 - 100,000(失敗を含む)

クロスリージョン

  • 宛先テーブルごとの 1 日あたりコピージョブ数: 100(失敗を含む)
  • プロジェクトごとの 1 日あたりのコピージョブ数: 2,000(失敗を含む)

一般的な制限事項

  • データセット コピーの転送構成を作成する前に、コピー先データセットを作成する必要があります。

  • データセット コピー構成ごとに、一度にアクティブにできるコピーは 1 つだけです。追加の転送実行はキューに入れられます。

データ型の制限

  • ビューのコピーはサポートされていません。
  • 外部テーブルのコピーはサポートされていません。
  • ストリーミング バッファ内のストレージのコピーはサポートされていません。
  • 顧客管理の暗号鍵で暗号化されたテーブルをコピーできるかどうかは、同じリージョン内でコピーするか異なるリージョン間でコピーするかによって異なります。

リージョン内

同じリージョン内でデータセットをコピーする場合は、顧客管理の暗号鍵(CMEK)で暗号化されたテーブルを含む暗号化されたテーブルをコピーできます。

クロスリージョン

デフォルトの暗号化を使用したテーブルについては、リージョン間でコピーできます。現時点では、顧客管理の暗号鍵(CMEK)で暗号化されたテーブルをリージョン間でコピーすることはできません。コピー先データセットにテーブルをコピーするときに、CMEK で暗号化されたテーブルはスキップされます。

コピー元データセットの制限

コピー元データセットに格納できるテーブルの最大数は 20,000 個です。実行ごとにコピーできるテーブルの数は、同じリージョン内でコピーするか異なるリージョン間でコピーするかによって異なります。

リージョン内

  • 最大 20,000 個のテーブルを含むデータセットをコピー元として使用できます。

  • 実行ごとに最大 20,000 個のテーブルをコピー先データセットにコピーできます。

リージョン間

  • 最大 20,000 個のテーブルを含むデータセットをコピー元として使用できます。

  • 実行ごとに最大 1,000 個のテーブルをコピー先データセットにコピーできます。

8,000 個のテーブルを含むデータセットのリージョン間コピーを構成すると、BigQuery Data Transfer Service により 8 個の実行単位が順次自動的に作成されます。最初の実行で 1,000 個のテーブルがコピーされ、次回の 24 時間後の実行で次の 1,000 個のテーブルがコピーされるという形で、データセット内のすべてのテーブルがコピーされます。この方法で最大 20,000 個のテーブルを含むデータセットをコピーできます。

テーブルの制限事項

  • パーティション分割テーブルのコピーは現在サポートされています。ただし、パーティション分割テーブルへのデータの追加はサポートされていません。

  • コピー元データセットとコピー先データセットにある同じテーブルの内容が、最後にコピーが成功してから変更されていない場合、そのテーブルはスキップされます。これは、[コピー先テーブルを上書きする] ボックスがチェックされている場合でも同様です。

  • テーブルを切り捨てる場合は、データセットのコピーが開始される前に、コピー先データセットに加えられた変更は確認されません。コピー先データセット内のすべてのデータが更新(上書き)されます。テーブルとスキーマの両方が上書きされます。

    • overwrite_destination_table フラグを使ってコピー時にコピー先のテーブルを上書きする場合は、どちらのテーブルにも同じパーティショニング スキーマが必要です。

サポートされるリージョン

ロケーションには、2 つの種類があります。

  • リージョンは、ロンドンなどの特定の地理的な場所となります。

  • マルチリージョンは、米国などの、2 つ以上の地理的な場所を含む広い地理的なエリアとなります。

データセットのコピーは、リージョンからリージョン、単一リージョンからマルチリージョン、マルチリージョンから単一リージョン、マルチリージョンからマルチリージョンに対して行うことができます。

現在、データセットのコピーができるリージョンは限られています。以下に示すように、データセットのコピーは BigQuery Data Transfer Service が現在サポートされているリージョンでのみ作成できます。

リージョンのロケーション

リージョンの説明 リージョン名
南北アメリカ
ラスベガス us-west4
モントリオール northamerica-northeast1
モントリオール northamerica-northeast1
北バージニア us-east4
オレゴン us-west1
ソルトレイクシティ us-west3
ヨーロッパ
ベルギー europe-west1
フィンランド europe-north1
フランクフルト europe-west3
ロンドン europe-west2
オランダ europe-west4
チューリッヒ europe-west6
アジア太平洋
ジャカルタ asia-southeast2
ムンバイ asia-south1
ソウル asia-northeast3
ムンバイ asia-south1
ソウル asia-northeast3
シンガポール asia-southeast1
シドニー australia-southeast1
台湾 asia-east1
東京 asia-northeast1

マルチリージョン

マルチリージョンの説明 マルチリージョン名
欧州連合の加盟国内のデータセンター1 EU
米国内のデータセンター US

1 EU マルチリージョン内のデータは europe-west2(ロンドン)や europe-west6(チューリッヒ)のデータセンターには保存されません。

次のステップ

  • 転送構成に関する情報の取得、転送構成の一覧表示、転送の実行履歴の表示など、転送の使用方法については、転送の操作をご覧ください。