ScalarDB Schema Loader を使用して既存のテーブルを ScalarDB にインポートする
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
既存のデータベースで ScalarDB を使用したい場合があります (データベースにまたがるトランザクションなど)。その場合、ScalarDB Schema Loader を使用して、それらのデータベースを ScalarDB の制御下にインポートできます。ScalarDB Schema Loader は、既存の各テーブルとメタデータテーブルに ScalarDB 内部メタデータ列を自動的に追加し、複数のデータベースにわたるトランザクション管理などのさまざまな ScalarDB 機能を有効にします。
始める前に
運用環境で ScalarDB にテーブルをインポートする場合は、データベーステーブルと ScalarDB メタデータテーブルにトランザクションメタデータ列が追加されるため、慎重に計画する必要があります。この場合、データベースと ScalarDB の間にはいくつかの違いがあり、いくつかの制限もあります。
データベースに追加されるもの
- ScalarDB メタデータテーブル: ScalarDB は、'scalardb' という名前空間 (基盤となるデータベースのスキーマまたはデータベース) で名前空間名とテーブルメタデータを管理します。
- トランザクションメタデータ列: Consensus Commit トランザクションマネージャーでは、トランザクションを適切に処理するために、実際のレコードとともに保存されたメタデータ (トランザクション ID、レコードバージョン、トランザクションステータスなど) が必要です。したがって、Consensus Commit トランザクションマネージャーを使用する場合、このツールはメタデータ列を追加します。
このツールはデータベースのメタデータのみを変更します。そのため、 処理時間はデータベースのサイズに比例して増加することはなく、通常は数秒しかかかりません。
要件
- SQLite を除く JDBC データベースをインポートできます。
- 各テーブルにはプライマリーキー列が必要です。(複合プライマリーキーを使用できます。)
- ターゲットテーブルには、サポートされているデータ型の列のみが必要です。詳細については、JDBC データベースから ScalarDB へのデータ型マッピング)を参照してください。
Schema Loader の設定
既存のテーブルをインポートするために Schema Loader を設定するには、Schema Loader を設定するを参照してください。
既存のテーブルをインポートするために Schema Loader を実行する
--import
オプションとインポート固有のスキーマファイルを使用して、JDBC データベース内の既存のテーブルを ScalarDB にインポートできます。テーブルをインポートするには、次のコマンドを実行し、山括弧内の内容を説明に従って置き換えます。
java -jar scalardb-schema-loader-<VERSION>.jar --config <PATH_TO_SCALARDB_PROPERTIES_FILE> -f <PATH_TO_SCHEMA_FILE> --import
<VERSION>
: 設定した ScalarDB Schema Loader のバージョン。<PATH_TO_SCALARDB_PROPERTIES_FILE>
: ScalarDB のプロパティファイルへのパス。サンプルのプロパティ ファイルについては、database.properties
を参照してください。<PATH_TO_SCHEMA_FILE>
: インポートスキーマファイルへのパス。サンプルについては、サンプルインポートスキーマファイルを参照してください。
既存のテーブルをインポートした後に Consensus Commit トランザクションマネージャーを使用する場合は、次のコマンドを個別に実行し、説明に従って山括弧内の内容を置き換えます。
java -jar scalardb-schema-loader-<VERSION>.jar --config <PATH_TO_SCALARDB_PROPERTIES_FILE> --coordinator
サンプルインポートスキーマファイル
以下は、テーブルをインポートするためのサンプルスキーマです。サンプルスキーマファイルについては、import_schema_sample.json
を参照してください。
{
"sample_namespace1.sample_table1": {
"transaction": true,
"override-columns-type": {
"c3": "TIME",
"c5": "TIMESTAMP"
}
},
"sample_namespace1.sample_table2": {
"transaction": true
},
"sample_namespace2.sample_table3": {
"transaction": false
}
}
インポートテーブルスキーマは、名前空間名、テーブル名、transaction
フィールド、及び override-columns-type
任意フィルドで設定されます:
transaction
フィールドは、テーブルがトランザクション用にインポートされるかどうかを示します。transaction
フィールドをtrue
に設定するか、transaction
フィールドを指定しない場合、このツールは必要に応じてトランザクションメタデータを含むテーブルを作成します。transaction
フィールドをfalse
に設定すると、このツールはトランザクションメタデータを追加せずにテーブルをインポートします (つまり、Storage API を使用するテーブルの場合)。override-columns-type
フィールドは、デフォルトのデータ型マッピングをオーバーライドする列を示します。このフィールドは任意であり、型のオーバーライドが必要な列でのみ設定する必要があります。