メインコンテンツまでスキップ
バージョン: 3.14

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 トランザクションマネージャーを使用する場合、このツールはメタデータ列を追加します。
注記

このツールはデータベースのメタデータのみを変更します。そのため、処理時間はデータベースのサイズに比例して増加することはなく、通常は数秒しかかかりません。

要件

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
},
"sample_namespace1.sample_table2": {
"transaction": true
},
"sample_namespace2.sample_table3": {
"transaction": false
}
}

インポートテーブルスキーマは、名前空間名、テーブル名、および transaction フィールドで設定されます。transaction フィールドは、テーブルがトランザクション用にインポートされるかどうかを示します。transaction フィールドを true に設定するか、transaction フィールドを指定しない場合、このツールは必要に応じてトランザクションメタデータを含むテーブルを作成します。transaction フィールドを false に設定すると、このツールはトランザクションメタデータを追加せずにテーブルをインポートします (つまり、Storage API を使用するテーブルの場合)。

JDBC データベースから ScalarDB へのデータ型マッピング

次の表は、各 JDBC データベースでサポートされているデータ型と、それらの ScalarDB データ型へのマッピングを示しています。データベースを選択し、既存のテーブルをインポートできるかどうかを確認してください。

MySQLScalarDB注記
bigintBIGINT下記の警告 1 を参照してください。
binaryBLOB
bitBOOLEAN
blobBLOB下記の警告 2 を参照してください。
charTEXT下記の警告 2 を参照してください。
doubleDOUBLE
floatFLOAT
intINT
int unsignedBIGINT下記の警告 2 を参照してください。
integerINT
longblobBLOB
longtextTEXT
mediumblobBLOB下記の警告 2 を参照してください。
mediumintINT下記の警告 2 を参照してください。
mediumtextTEXT下記の警告 2 を参照してください。
smallintINT下記の警告 2 を参照してください。
textTEXT下記の警告 2 を参照してください。
tinyblobBLOB下記の警告 2 を参照してください。
tinyintINT下記の警告 2 を参照してください。
tinyint(1)BOOLEAN
tinytextTEXT下記の警告 2 を参照してください。
varbinaryBLOB下記の警告 2 を参照してください。
varcharTEXT下記の警告 2 を参照してください。

上記に記載されていないデータ型はサポートされていません。サポートされていない一般的なデータ型は次のとおりです。

  • bigint unsigned
  • bit(n) (n > 1)
  • date
  • datetime
  • decimal
  • enum
  • geometry
  • json
  • numeric
  • set
  • time
  • timestamp
  • year
警告
  1. ScalarDB の BIGINT の値の範囲は、基礎となるデータベースの bigint のサイズに関係なく、-2^53 から 2^53 です。したがって、インポートされたテーブルにこの範囲外のデータが存在する場合、ScalarDB はそれを読み取ることができません。

  2. 上記の特定のデータ型の場合、ScalarDB は基になるデータベースのデータ型よりも大きいデータ型をマップする場合があります。その場合、基になるデータベースで指定されたサイズよりも大きいサイズの値を入力するとエラーが表示されます。

  3. ScalarDB の BLOB の最大サイズは約 2GB (正確には 2^31-1 バイト) です。対照的に、Oracle の blob は (4GB-1)*(ブロック数) を持つことができます。したがって、インポートされたテーブルに 2GB を超えるデータが存在する場合、ScalarDB はそれを読み取ることができません。

  4. ScalarDB は、ScalarDB の DOUBLE よりも精度の高い Oracle float 列をサポートしていません。

  5. ScalarDB では、ScalarDB のデータ型の最大サイズにより、p が 15 より大きい場合、Oracle の numeric(p, s) 列 (p は精度、s はスケール) をサポートしません。s が 0 の場合、ScalarDB は列を BIGINT にマッピングします。それ以外の場合は、ScalarDB は列を DOUBLE にマッピングします。後者の場合、浮動小数点値が固定小数点値にキャストされるため、基になるデータベースで切り上げまたは切り捨てが発生する可能性があることに注意してください。

アプリケーションでインポート機能を使用する

次のインターフェースを使用して、アプリケーションでインポート機能を使用できます。