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 ノードのホストをカンマ区切りのリストで表したもの。
cassandraPort (省略可)ノード上の Apache Cassandra に到達する TCP ポート(デフォルトは 9042)。
cassandraKeyspace テーブルが配置されている Apache Cassandra キースペース。
cassandraTable コピーする Apache Cassandra テーブル。
bigtableProjectId Apache Cassandra テーブルがコピーされる Bigtable インスタンスの Google Cloud プロジェクト ID。
bigtableInstanceId Apache Cassandra テーブルをコピーする Cloud Bigtable インスタンス ID。
bigtableTableId Apache Cassandra テーブルをコピーする Bigtable テーブルの名前。
defaultColumnFamily (省略可)Bigtable テーブルの列ファミリーの名前(デフォルトは default)。
rowKeySeparator (省略可)行キーの作成に使用される区切り文字(デフォルトは #)。

テンプレートを実行する

コンソール

  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 テーブル

次のステップ