Cloud Spanner 以外のデータベースからのデータ インポート

このページでは、Cloud Spanner 以外のデータベースからエクスポートした Avro ファイルを準備し、それらのファイルを Cloud Spanner にインポートする方法について説明します。以前エクスポートした Cloud Spanner データベースをインポートする場合は、Cloud Spanner に Avro ファイルをインポートするをご覧ください。

このプロセスでは Cloud Dataflow を使用して、Avro ファイルと JSON マニフェスト ファイルのセットを含む Cloud Storage バケットからデータをインポートします。

はじめに

データベースをインポートするには、まず、Cloud Spanner、Cloud Storage、Compute Engine、Cloud Dataflow の以下の API を有効にする必要があります。

APIを有効にする

また、十分な割り当てと必須の Cloud IAM 権限も必要です。

割り当て要件

GCP サービスによるインポート ジョブの割り当て要件は次のとおりです。

  • Cloud Spanner: インポートするデータの量をサポートできるだけのノードが必要です。データベースをインポートするためにノードを追加する必要はありませんが、ジョブが妥当な時間内に終了するようにノードの追加が必要になる場合があります。詳細については、ジョブの最適化をご覧ください。
  • Cloud Storage: 以前にエクスポートしたファイルが格納されているバケットが必要です。バケットのサイズを設定する必要はありません。
  • Cloud Dataflow: インポート ジョブは、他の Cloud Dataflow ジョブと同じ CPU、ディスク使用量、IP アドレスの Compute Engine 割り当てに従います。
  • Compute Engine: インポート ジョブを実行する前に、Cloud Dataflow によって使用される Compute Engine の初期割り当てを設定する必要があります。これらの割り当ては、Cloud Dataflow によるジョブのスケーリングで許可する最大のリソース数を表します。推奨の開始値は次のとおりです。

    • CPU: 200
    • 使用中の IP アドレス: 200
    • 標準永続ディスク: 50 TB

    通常、他の調整は必要ありません。Cloud Dataflow が自動スケーリングを行うため、インポート中に実際に使用されたリソースに対してのみ課金されます。ジョブでより多くのリソースが使用される可能性がある場合、Cloud Dataflow UI に警告アイコンが表示されます。警告アイコンが表示されてもジョブは完了します。

Cloud IAM 要件

データベースをインポートするには、インポート ジョブに関連するすべてのサービスを使用するための十分な権限を持つ Cloud IAM の役割も必要です。役割と権限の付与については、IAM 役割の適用をご覧ください。

データベースをインポートするには、次の役割が必要です。

  • GCP プロジェクト レベル:
    • Cloud Spanner 閲覧者
    • Cloud Dataflow 管理者
    • ストレージ管理者
  • Cloud Spanner データベースまたはインスタンス レベル、あるいは GCP プロジェクト レベル:
    • Cloud Spanner データベース管理者

Cloud Spanner 以外のデータベースから Avro ファイルへのデータのエクスポート

インポート プロセスでは、Cloud Storage バケット内の Avro ファイルからデータを取り込みます。任意のソースからデータを Avro 形式でエクスポートできます。これにはさまざまな方法があります。

データをエクスポートするときは、次の点に留意してください。

  • 任意の Avro プリミティブ型配列複合型を使用してエクスポートできます。
  • Avro ファイルの各列には、次の列型のいずれかを使用する必要があります。

    • ARRAY
    • BOOL
    • BYTES
    • DOUBLE
    • FLOAT
    • INT
    • LONG*
    • STRING*

    *タイムスタンプを格納する LONG またはタイムスタンプを格納する STRING を Cloud Spanner TIMESTAMP としてインポートできます。詳細については、下記の推奨されるマッピングをご参照ください。

  • Avro ファイルをエクスポートする際に、メタデータを含めたり生成したりする必要はありません。

  • ファイルについて特定の命名規則に従う必要はありません。

ファイルを Cloud Storage に直接エクスポートしない場合は、Avro ファイルを Cloud Storage バケットにアップロードする必要があります。詳細な手順については、オブジェクトのアップロードをご覧ください。

Cloud Spanner データベースのスキーマの作成

インポートを実行する前に、Cloud Spanner でターゲット テーブルを作成し、そのスキーマを定義する必要があります。

Avro ファイルの各列に対し適切な列型を使用するスキーマを作成する必要があります。

Avro の列型 Cloud Spanner の列型
ARRAY ARRAY
BOOL BOOL
BYTES BYTES
DOUBLE FLOAT64
FLOAT FLOAT64
INT INT64
LONG

INT64

TIMESTAMPLONG が 1970-01-01 00:00:00 UTC 以降のマイクロ秒数のタイムスタンプを表す場合)

STRING

STRING

TIMESTAMPSTRINGSQL クエリの正規形式のタイムスタンプを表す場合)

最初にテーブルのスキーマを定義するときではなく、Cloud Spanner にデータをインポートした後でセカンダリ インデックスを作成することをおすすめします。

spanner-export.json ファイルの作成

Cloud Storage バケットに spanner-export.json という名前のファイルを作成する必要もあります。このファイルには、各テーブルの名前とデータファイルの場所を示す tables 配列を格納します。

ファイルの内容は次の形式を取ります。

{
  "tables": [
   {
    "name": "TABLE1",
    "dataFiles": [
      "RELATIVE/PATH/TO/TABLE1_FILE1",
      "RELATIVE/PATH/TO/TABLE1_FILE2"
    ]
   },
   {
    "name": "TABLE2",
    "dataFiles": ["RELATIVE/PATH/TO/TABLE2_FILE1"]
   }
  ]
}

gcloud を使用した Cloud Dataflow インポート ジョブの実行

インポート ジョブを開始するには、gcloud コマンドライン ツールを使用して Avro to Cloud Spanner テンプレートでジョブを実行する手順に従います。

インポート ジョブを開始したら、GCP Console でジョブの詳細を確認できます。

インポート ジョブが終了したら、必要なセカンダリ インデックスを追加します。

インポート ジョブのリージョンの選択

Cloud Storage バケットでリージョン構成を使用するかマルチリージョン構成を使用するかによって、異なるリージョンの選択が必要になる場合があります。下りネットワーク料金が発生しないようにするには、Cloud Storage バケットのロケーションと重複するリージョンを選択します。

リージョン バケットのロケーション

Cloud Storage バケットのロケーションがリージョンである場合、無料のネットワーク使用を利用できるリージョンであれば、インポート ジョブに対し同じリージョンを選択します。

同じリージョンを利用できない場合は、下り料金が適用されます。下りネットワーク料金が最小限になるリージョンを選択するには、Cloud Storage の下りネットワークの料金をご覧ください。

マルチリージョン バケットのロケーション

Cloud Storage バケットのロケーションがマルチリージョンである場合、無料のネットワーク使用を利用できるマルチリージョン ロケーションを構成するリージョンの 1 つを選択します。

重複するリージョンを利用できない場合は、下り料金が適用されます。下りネットワーク料金が最小限になるリージョンを選択するには、Cloud Storage の下りネットワークの料金をご覧ください。

Cloud Dataflow UI でのジョブの表示またはトラブルシューティング

インポート ジョブの開始後、GCP Console の [Cloud Dataflow] セクションで、ジョブの詳細(ログなど)を表示できます。

Cloud Dataflow ジョブの詳細の表示

現在実行中のジョブの詳細を表示するには:

  1. インポートしたデータベースの [データベースの詳細] ページに移動します。
  2. ジョブ ステータス メッセージ内の [Cloud Dataflow でジョブの詳細を表示] をクリックします。

    進行中のジョブのステータス メッセージ

    GCP Console に Cloud Dataflow ジョブの詳細が表示されます。

最近実行したジョブを表示するには:

  1. インポートしたデータベースの [データベースの詳細] ページに移動します。
  2. [インポート / エクスポート] タブをクリックします。
  3. リスト内のジョブの名前をクリックします。

    GCP Console に Cloud Dataflow ジョブの詳細が表示されます。

1 週間以上前に実行したジョブを表示するには:

  1. GCP Console の Cloud Dataflow ジョブページに移動します。
    ジョブページに移動
  2. リスト内でジョブを見つけ、その名前をクリックします。

    GCP Console に Cloud Dataflow ジョブの詳細が表示されます。

ジョブの Cloud Dataflow ログの表示

Cloud Dataflow ジョブのログを表示するには、上記の説明に従ってジョブの詳細ページに移動し、ジョブ名の右側にある [ログ] をクリックします。

ジョブが失敗した場合は、ログでエラーを探します。エラーがある場合、エラー数が [ログ] の横に表示されます。

[ログ] ボタンの横のエラー数の例

ジョブエラーを表示するには:

  1. [ログ] の横のエラー数をクリックします。

    GCP Console にジョブのログが表示されます。エラーを表示するには、スクロールが必要な場合があります。

  2. エラーアイコン エラーアイコン が表示されているエントリを見つけます。

  3. 個別のログエントリをクリックして、その内容を展開します。

Cloud Dataflow ジョブのトラブルシューティングの詳細については、パイプラインをトラブルシューティングするをご覧ください。

実行速度が遅いインポート ジョブの最適化

初期設定の提案に従っている場合は、通常、他の調整は必要ありません。ジョブの実行速度が遅い場合は、その他の最適化を試すことができます。

  • ジョブとデータのロケーションの最適化: Cloud Spanner インスタンスと Cloud Storage バケットが配置されている同じリージョン内で Cloud Dataflow ジョブを実行します。

  • 十分な Cloud Dataflow リソースの確保: 関連する Compute Engine の割り当てによって Cloud Dataflow ジョブのリソースが制限されている場合、Google Cloud Platform Console の、ジョブの Cloud Dataflow ページに警告アイコン 警告アイコン とログメッセージが表示されます。

    割り当て制限の警告のスクリーンショット

    この場合、CPU、使用中の IP アドレス、標準永続ディスクの割り当てを増やすと、ジョブの実行時間が短くなる可能性がありますが、Compute Engine の追加料金が発生する場合があります。

  • Cloud Spanner の CPU 使用率の確認: インスタンスの CPU 使用率が 65% を超えている場合は、そのインスタンスのノード数を増やすことができます。追加のノードによって Cloud Spanner のリソースが増加し、ジョブの実行速度は速くなりますが、Cloud Spanner の追加料金が発生します。

インポート ジョブのパフォーマンスに影響する要素

インポート ジョブを完了するためにかかる時間には、いくつかの要素が影響します。

  • Cloud Spanner データベースのサイズ: 処理するデータ量が増加すると、必要となる時間とリソースも多くなります。

  • Cloud Spanner データベースのスキーマ(インデックスを含む): テーブルの数、行のサイズ、セカンダリ インデックスの数が、インポート ジョブの実行にかかる時間に影響します。

  • データのロケーション: データは、Cloud Dataflow により Cloud Spanner と Cloud Storage の間で転送されます。3 つのコンポーネントがすべて同じリージョン内にあることが理想的です。コンポーネントが同じリージョン内にない場合は、リージョン間のデータの移動によってジョブは遅くなります。

  • Cloud Dataflow ワーカーの数: 自動スケーリングを使用することにより、Cloud Dataflow では、処理する必要がある作業量に応じてジョブのワーカー数が選択されます。ただし、CPU、使用中の IP アドレス、標準永続ディスクの割り当てにより、ワーカー数には上限があります。割り当ての上限に達すると、Cloud Dataflow UI に警告アイコンが表示されます。この状況では、進捗は遅くなりますがジョブは完了します。

  • Cloud Spanner に対する既存の負荷: インポート ジョブを実行すると、Cloud Spanner インスタンスの CPU 負荷がかなり高くなります。インスタンスに既存の負荷がかなりある場合、インポート ジョブの実行はさらに遅くなります。

  • Cloud Spanner ノードの数: インスタンスの CPU 使用率が 65% を超えると、ジョブの実行速度はさらに遅くなります。

このページは役立ちましたか?評価をお願いいたします。

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

Cloud Spanner のドキュメント