Apache Cassandra to Bigtable テンプレート

Apache Cassandra to Bigtable テンプレートは、Apache Cassandra から Bigtable にテーブルをコピーします。このテンプレートに対して行う必要のある構成は最小限に抑えられており、Cassandra のテーブル構造を Bigtable で可能な限り再現します。

Apache Cassandra to Bigtable テンプレートは次の場合に役立ちます。

  • 短いダウンタイムしか許容されない状況で Apache Cassandra データベースを移行する。
  • グローバルなサービス提供を目的として、Cassandra のテーブルを Bigtable に定期的に複製する。

パイプラインの要件

  • パイプラインを実行する前に、複製先の Bigtable テーブルが存在していること。
  • Dataflow ワーカーと Apache Cassandra ノードの間のネットワーク接続。

型変換

Apache Cassandra to Bigtable テンプレートでは、Apache Cassandra のデータ型が Bigtable のデータ型に自動的に変換されます。

ほとんどのプリミティブは Bigtable と Apache Cassandra で同じように表現されますが、次のプリミティブは異なる方法で表現されます。

  • DateTimestampDateTime オブジェクトに変換されます。
  • UUIDString に変換されます。
  • VarintBigDecimal に変換されます。

Apache Cassandra は、TupleListSetMap などの複雑な型もネイティブにサポートしています。Apache Beam にはタプルに対応する型がないため、このパイプラインではタプルはサポートされません。

たとえば、Apache Cassandra では「mylist」という名前の List 型の列を使用し、次の表のような値を格納できます。

row mylist
1 (a,b,c)

このリスト列はパイプラインによって 3 つの異なる列に展開されます(Bigtable ではこれを列修飾子といいます)。列の名前は「mylist」ですが、「mylist[0]」のようにリスト内のアイテムのインデックスがパイプラインによって追加されます。

row mylist[0] mylist[1] mylist[2]
1 a b c

このパイプラインでは、セットもリストと同じように処理されますが、セルがキーか値かを示す接尾辞が追加されます。

row mymap
1 {"first_key":"first_value","another_key":"different_value"}

変換後、テーブルは次のようになります。

row mymap[0].key mymap[0].value mymap[1].key mymap[1].value
1 first_key first_value another_key different_value

主キー変換

Apache Cassandra では、主キーはデータ定義言語を使用して定義されます。主キーは、単純、複合、クラスタ化された列の複合のいずれかです。Bigtable では、バイト配列を辞書順に並べ替える行キーの手動作成がサポートされています。このパイプラインは、キーの型の情報を自動で収集し、複数の値に基づいて行キーを作成するためのベスト プラクティスに基づいてキーを作成します。

テンプレートのパラメータ

必須パラメータ

  • cassandraHosts: Apache Cassandra ノードのホストをカンマ区切りのリストで表したもの。
  • cassandraKeyspace: テーブルが配置されている Apache Cassandra キースペース。
  • cassandraTable: コピーする Apache Cassandra テーブル。
  • bigtableProjectId: Bigtable インスタンスに関連付けられた Google Cloud プロジェクト ID。
  • bigtableInstanceId: Apache Cassandra テーブルがコピーされる Bigtable インスタンスの ID。
  • bigtableTableId: Apache Cassandra テーブルがコピーされる Bigtable テーブルの名前。

オプション パラメータ

  • cassandraPort: ノード上の Apache Cassandra に到達するために使用する TCP ポート。デフォルト値は 9042 です。
  • defaultColumnFamily: Bigtable テーブルの列ファミリーの名前。デフォルト値は default です。
  • rowKeySeparator: 行キーの作成に使用される区切り文字。デフォルト値は # です。
  • splitLargeRows: 大きな行を複数の MutateRows リクエストに分割するためのフラグ。大きな行が複数の API 呼び出しで分割されている場合、行の更新はアトミックではありません。.
  • writetimeCassandraColumnSchema: Cassandra の writetime を Bigtable にコピーするスキーマの GCS パス。このスキーマを生成するコマンドは cqlsh -e "select json * from system_schema.columns where keyspace_name='$CASSANDRA_KEYSPACE' and table_name='$CASSANDRA_TABLE'`" > column_schema.json です。$WRITETIME_CASSANDRA_COLUMN_SCHEMA を GCS パス(gs://$BUCKET_NAME/column_schema.json など)に設定します。次に、スキーマを GCS にアップロードします。gcloud storage cp column_schema.json $WRITETIME_CASSANDRA_COLUMN_SCHEMAJSON をサポートするには、Cassandra バージョン 2.2 以降が必要です。
  • setZeroTimestamp: Cassandra writetime が存在しない場合、Bigtable セルのタイムスタンプを 0 に設定するフラグ。このフラグが設定されていない場合のデフォルトの動作では、Bigtable セルのタイムスタンプがテンプレートのレプリケーション時間(現在の時刻)として設定されます。

テンプレートを実行する

コンソール

  1. Dataflow の [テンプレートからジョブを作成] ページに移動します。
  2. [テンプレートからジョブを作成] に移動
  3. [ジョブ名] フィールドに、固有のジョブ名を入力します。
  4. (省略可)[リージョン エンドポイント] で、プルダウン メニューから値を選択します。デフォルトのリージョンは us-central1 です。

    Dataflow ジョブを実行できるリージョンのリストについては、Dataflow のロケーションをご覧ください。

  5. [Dataflow テンプレート] プルダウン メニューから、[ the Cassandra to Cloud Bigtable template] を選択します。
  6. 表示されたパラメータ フィールドに、パラメータ値を入力します。
  7. [ジョブを実行] をクリックします。

gcloud

シェルまたはターミナルで、テンプレートを実行します。

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cassandra_To_Cloud_Bigtable \
    --region REGION_NAME \
    --parameters \
bigtableProjectId=BIGTABLE_PROJECT_ID,\
bigtableInstanceId=BIGTABLE_INSTANCE_ID,\
bigtableTableId=BIGTABLE_TABLE_ID,\
cassandraHosts=CASSANDRA_HOSTS,\
cassandraKeyspace=CASSANDRA_KEYSPACE,\
cassandraTable=CASSANDRA_TABLE

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

  • JOB_NAME: 一意の任意のジョブ名
  • VERSION: 使用するテンプレートのバージョン

    使用できる値は次のとおりです。

    • latest: 最新バージョンのテンプレートを使用します。このテンプレートは、バケット内で日付のない親フォルダ(gs://dataflow-templates-REGION_NAME/latest/)にあります。
    • バージョン名(例: 2023-09-12-00_RC00)。特定のバージョンのテンプレートを使用します。このテンプレートは、バケット内で対応する日付の親フォルダ(gs://dataflow-templates-REGION_NAME/)にあります。
  • REGION_NAME: Dataflow ジョブをデプロイするリージョン(例: us-central1
  • BIGTABLE_PROJECT_ID: Bigtable が配置されているプロジェクト ID
  • BIGTABLE_INSTANCE_ID: Bigtable インスタンス ID
  • BIGTABLE_TABLE_ID: Bigtable テーブル名
  • CASSANDRA_HOSTS: Apache Cassandra のホストリスト。複数のホストがある場合は、手順に沿ってカンマをエスケープしてください。
  • CASSANDRA_KEYSPACE: テーブルが配置されている Apache Cassandra キースペース
  • CASSANDRA_TABLE: 移行する必要がある Apache Cassandra テーブル

API

REST API を使用してテンプレートを実行するには、HTTP POST リクエストを送信します。API とその認証スコープの詳細については、projects.templates.launch をご覧ください。

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/Cassandra_To_Cloud_Bigtable
{
   "jobName": "JOB_NAME",
   "parameters": {
       "bigtableProjectId": "BIGTABLE_PROJECT_ID",
       "bigtableInstanceId": "BIGTABLE_INSTANCE_ID",
       "bigtableTableId": "BIGTABLE_TABLE_ID",
       "cassandraHosts": "CASSANDRA_HOSTS",
       "cassandraKeyspace": "CASSANDRA_KEYSPACE",
       "cassandraTable": "CASSANDRA_TABLE"
   },
   "environment": { "zone": "us-central1-f" }
}

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

  • PROJECT_ID: Dataflow ジョブを実行する Google Cloud プロジェクトの ID
  • JOB_NAME: 一意の任意のジョブ名
  • VERSION: 使用するテンプレートのバージョン

    使用できる値は次のとおりです。

    • latest: 最新バージョンのテンプレートを使用します。このテンプレートは、バケット内で日付のない親フォルダ(gs://dataflow-templates-REGION_NAME/latest/)にあります。
    • バージョン名(例: 2023-09-12-00_RC00)。特定のバージョンのテンプレートを使用します。このテンプレートは、バケット内で対応する日付の親フォルダ(gs://dataflow-templates-REGION_NAME/)にあります。
  • LOCATION: Dataflow ジョブをデプロイするリージョン(例: us-central1
  • BIGTABLE_PROJECT_ID: Bigtable が配置されているプロジェクト ID
  • BIGTABLE_INSTANCE_ID: Bigtable インスタンス ID
  • BIGTABLE_TABLE_ID: Bigtable テーブル名
  • CASSANDRA_HOSTS: Apache Cassandra のホストリスト。複数のホストがある場合は、手順に沿ってカンマをエスケープしてください。
  • CASSANDRA_KEYSPACE: テーブルが配置されている Apache Cassandra キースペース
  • CASSANDRA_TABLE: 移行する必要がある Apache Cassandra テーブル

次のステップ