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フィールドは、デフォルトのデータ型マッピングをオーバーライドする列を示します。このフィールドは任意であり、型のオーバーライドが必要な列でのみ設定する必要があります。
JDBC データベースから ScalarDB へのデータ型マッピング
次の表は、各 JDBC データベースでサポートされているデータ型と、それらの ScalarDB データ型へのマッピングを示しています。データベースを選択し、既存のテーブルをインポートできるかどうかを確認してください。
- MySQL
- PostgreSQL and YugabyteDB
- Oracle
- SQL Server
- Db2
| MySQL | ScalarDB | 注記 |
|---|---|---|
| bigint | BIGINT | 下記の警告 1 を参照してください。 |
| binary | BLOB | |
| bit | BOOLEAN | |
| blob | BLOB | 下記の警告 2 を参照してください。 |
| char | TEXT | 下記の警告 2 を参照してください。 |
| date | DATE | |
| datetime | TIMESTAMP (デフォルト)、TIMESTAMPTZ | TIMESTAMPTZ としてインポートする場合、ScalarDB はデータが UTC タイムゾーンにあると想定します。下記の警告 6 を参照してください。 |
| double | DOUBLE | |
| float | FLOAT | |
| int | INT | |
| int unsigned | BIGINT | 下記の警告 2 を参照してください。 |
| integer | INT | |
| longblob | BLOB | |
| longtext | TEXT | |
| mediumblob | BLOB | 下記の警告 2 を参照してください。 |
| mediumint | INT | 下記の警告 2 を参照してください。 |
| mediumtext | TEXT | 下記の警告 2 を参照してください。 |
| smallint | INT | 下記の警告 2 を参照してください。 |
| text | TEXT | 下記の警告 2 を参照してください。 |
| time | TIME | |
| timestamp | TIMESTAMPTZ | |
| tinyblob | BLOB | 下記の警告 2 を参照してください。 |
| tinyint | INT | 下記の警告 2 を参照してください。 |
| tinyint(1) | BOOLEAN | |
| tinytext | TEXT | 下記の警告 2 を参照してください。 |
| varbinary | BLOB | 下記の警告 2 を参照してください。 |
| varchar | TEXT | 下記の警告 2 を参照してください。 |
上記に記載されていないデータ型はサポートされていません。サポートされていない一般的なデータ型は次のとおりです。
- bigint unsigned
- bit(n) (n > 1)
- decimal
- enum
- geometry
- json
- numeric
- set
- year
| PostgreSQL/YugabyteDB | ScalarDB | 注記 |
|---|---|---|
| bigint | BIGINT | 下記の警告 1 を参照してください。 |
| boolean | BOOLEAN | |
| bytea | BLOB | |
| character | TEXT | 下記の警告 2 を参照してください。 |
| character varying | TEXT | 下記の警告 2 を参照してください。 |
| date | DATE | |
| double precision | DOUBLE | |
| integer | INT | |
| real | FLOAT | |
| smallint | INT | 下記の警告 2 を参照してください。 |
| text | TEXT | |
| time | TIME | |
| timestamp | TIMESTAMP | |
| timestamp with time zone | TIMESTAMPTZ |
上記に記載されていないデータ型はサポートされていません。サポートされていない一般的なデータ型は次のとおりです。
- bigserial
- bit
- box
- cidr
- circle
- inet
- interval
- json
- jsonb
- line
- lseg
- macaddr
- macaddr8
- money
- numeric
- path
- pg_lsn
- pg_snapshot
- point
- polygon
- smallserial
- serial
- time with time zone
- tsquery
- tsvector
- txid_snapshot
- uuid
- xml
| Oracle | ScalarDB | 注記 |
|---|---|---|
| binary_double | DOUBLE | |
| binary_float | FLOAT | |
| blob | BLOB | 下記の警告 3 を参照してください。 |
| char | TEXT | 下記の警告 2 を参照してください。 |
| clob | TEXT | |
| date | DATE(デフォルト)、TIME、TIMESTAMP | 下記の警告 6 を参照してください。 |
| float | DOUBLE | 下記の警告 4 を参照してください。 |
| long | TEXT | |
| long raw | BLOB | |
| nchar | TEXT | 下記の警告 2 を参照してください。 |
| nclob | TEXT | |
| number | BIGINT / DOUBLE | 下記の警告 5 を参照してください。 |
| nvarchar2 | TEXT | 下記の警告 2 を参照してください。 |
| raw | BLOB | 下記の警告 2 を参照してください。 |
| timestamp | TIMESTAMP (デフォルト)、TIME | 下記の警告 6 を参照してください。 |
| timestamp with time zone | TIMESTAMPTZ | |
| timestamp with local time zone | TIMESTAMPTZ | |
| varchar2 | TEXT | 下記の警告 2 を参照してください。 |
上記に記載されていないデータ型はサポートされていません。サポートされていない一般的なデータ型は次のとおりです。
- interval
- rowid
- urowid
- bfile
- json
| SQL Server | ScalarDB | 注記 |
|---|---|---|
| bigint | BIGINT | 下記の警告 1 を参照してください。 |
| binary | BLOB | 下記の警告 2 を参照してください。 |
| bit | BOOLEAN | |
| char | TEXT | 下記の警告 2 を参照してください。 |
| date | DATE | |
| datetime | TIMESTAMP | |
| datetime2 | TIMESTAMP | |
| float | DOUBLE | |
| image | BLOB | |
| int | INT | |
| nchar | TEXT | 下記の警告 2 を参照してください。 |
| ntext | TEXT | |
| nvarchar | TEXT | 下記の警告 2 を参照してください。 |
| offsetdatetime | TIMESTAMPTZ | |
| real | FLOAT | |
| smalldatetime | TIMESTAMP | |
| smallint | INT | 下記の警告 2 を参照してください。 |
| text | TEXT | |
| time | TIME | |
| tinyint | INT | 下記の警告 2 を参照してください。 |
| varbinary | BLOB | 下記の警告 2 を参照してください。 |
| varchar | TEXT | 下記の警告 2 を参照してください。 |
上記に記載されていないデータ型はサポートされていません。サポートされていない一般的なデータ型は次のとおりです。
- cursor
- decimal
- geography
- geometry
- hierarchyid
- money
- numeric
- rowversion
- smallmoney
- sql_variant
- uniqueidentifier
- xml
| Db2 | ScalarDB | 注意事項 |
|---|---|---|
| BIGINT | BIGINT | 下記の警告 1 を参照してください。 |
| BINARY | BLOB | |
| BLOB | BLOB | |
| BOOLEAN | BOOLEAN | |
| CHAR | TEXT | |
| CHAR FOR BIT DATA | BLOB | |
| CLOB | TEXT | |
| DATE | DATE | |
| DOUBLE | DOUBLE | 下記の警告 2 を参照してください。 |
| FLOAT(p), with p ≤ 24 | FLOAT | 下記の警告 2 を参照してください。 |
| FLOAT(p), with p ≥ 25 | DOUBLE | 下記の警告 2 を参照してください。 |
| GRAPHIC | TEXT | |
| INT | INT | |
| NCHAR | TEXT | |
| NCLOB | TEXT | |
| NVARCHAR | TEXT | |
| REAL | FLOAT | 下記の警告 2 を参照してください。 |
| SMALLINT | INT | |
| TIME | TIME | |
| TIMESTAMP | TIMESTAMP (default), TIME, TIMESTAMPTZ | 下記の警告 6 を参照してください。 |
| VARBINARY | BLOB | |
| VARCHAR | TEXT | |
| VARCHAR FOR BIT DATA | BLOB | |
| VARGRAPHIC | TEXT |
上記にリストされていないデータ型はサポートされていません。以下は、サポートされていない一般的なデータ型の例です:
- decimal
- decfloat
- xml
ScalarDB の
BIGINTの値の範囲は、基礎となるデータベースのbigintのサイズに関係なく、-2^53から2^53です。したがって、インポートされたテーブルにこの範囲外のデータが存在する場合、ScalarDB はそれを読み取ることができません。上記の特定のデータ型の場合、ScalarDB は基になるデータベースのデータ型よりも大きいデータ型をマップする場合があります。その場合、基になるデータベースで指定されたサイズよりも大きいサイズの値を入力するとエラーが表示されます。
ScalarDB の
BLOBの最大サイズは約 2GB (正確には2^31-1バイト) です。対照的に、Oracle のblobは (4GB-1)*(ブロック数) を持つことができます。したがって、インポートされたテーブルに 2GB を超えるデータが存在する場合、ScalarDB はそれを読み取ることができません。ScalarDB は、ScalarDB の
DOUBLEよりも精度の高い Oraclefloat列をサポートしていません。ScalarDB では、ScalarDB のデータ型の最大サイズにより、
pが15より大きい場合、Oracle のnumeric(p, s)列 (pは精度、sはスケール) をサポー トしません。sが0の場合、ScalarDB は列をBIGINTにマッピングします。それ以外の場合は、ScalarDB は列をDOUBLEにマッピングします。後者の場合、浮動小数点値が固定小数点値にキャストされるため、基になるデータベースで切り上げまたは切り捨てが発生する可能性があることに注意してください。基盤となるデータベースデータ型は、いくつかの ScalarDB データ型にマップできます。デフォルトのマッピングをオーバーライドするには、インポートスキーマファイルの
override-columns-typeフィールドを使用します。例については、サンプルインポートスキーマファイルを参照してください。
アプリケーションでインポート機能を使用する
次のインターフェースを使用して、アプリケーションでインポート機能を使用できます。