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 で同じように表現されますが、次のプリミティブは異なる方法で表現されます。
DateとTimestampはDateTimeオブジェクトに変換されます。UUIDはStringに変換されます。VarintはBigDecimalに変換されます。
Apache Cassandra は、Tuple、List、Set、Map などの複雑な型もネイティブにサポートしています。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 セルのタイムスタンプがテンプレートのレプリケーション時間(現在の時刻)として設定されます。
テンプレートを実行する
コンソール
- Dataflow の [テンプレートからジョブを作成] ページに移動します。 [テンプレートからジョブを作成] に移動
- [ジョブ名] フィールドに、固有のジョブ名を入力します。
- (省略可)[リージョン エンドポイント] で、プルダウン メニューから値を選択します。デフォルトのリージョンは
us-central1です。Dataflow ジョブを実行できるリージョンのリストについては、Dataflow のロケーションをご覧ください。
- [Dataflow テンプレート] プルダウン メニューから、[ the Cassandra to Cloud Bigtable template] を選択します。
- 表示されたパラメータ フィールドに、パラメータ値を入力します。
- [ジョブを実行] をクリックします。
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 が配置されているプロジェクト IDBIGTABLE_INSTANCE_ID: Bigtable インスタンス IDBIGTABLE_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 プロジェクト IDJOB_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 が配置されているプロジェクト IDBIGTABLE_INSTANCE_ID: Bigtable インスタンス IDBIGTABLE_TABLE_ID: Bigtable テーブル名CASSANDRA_HOSTS: Apache Cassandra のホストリスト。複数のホストがある場合は、手順に沿ってカンマをエスケープしてください。CASSANDRA_KEYSPACE: テーブルが配置されている Apache Cassandra キースペースCASSANDRA_TABLE: 移行する必要がある Apache Cassandra テーブル
次のステップ
- Dataflow テンプレートについて学習する。
- Google 提供のテンプレートのリストを確認する。