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 へのデータ型マッピングを参照してください。
- ScalarDB は、すべての管理操作および CRUD 操作で同じ基盤データベースユーザーアカウントが使用されることを前提としています。そのため、テーブル所有者が ScalarDB で使用されるユーザーアカウントと異なる場合、データベース権限要件で言及されている権限を超えた追加の権限が必要になる可能性があります。これらの要件は、ScalarDB で使用されるユーザーアカウントがテーブル所有者でもあることを前提としています。
Schema Loader の設定
既存のテーブルをインポートするために Schema Loader を設定するには、Schema Loader を設定するを参照してください。
既存のテーブルをインポートするために Schema Loader を実行する
--import オプションとインポート固有のスキーマファイルを使用して、JDBC データベース内の既存のテーブルを ScalarDB にインポートできます。テーブルをインポートするには、次のコマンドを実行し、山括弧内の内容を説明に従って置き換えます。
java -jar scalardb-schema-loader-<X.Y.Z>.jar --config <PATH_TO_SCALARDB_PROPERTIES_FILE> -f <PATH_TO_SCHEMA_FILE> --import
<X.Y.Z>: 設定した ScalarDB Schema Loader のバージョン。<PATH_TO_SCALARDB_PROPERTIES_FILE>: ScalarDB のプロパティファイルへのパス。サンプルのプロパティファイルについては、database.propertiesを参照してください。<PATH_TO_SCHEMA_FILE>: インポートスキーマファイルへのパス。サンプルについては、サンプルインポートスキーマファイルを参照してください。
既存のテーブルをインポートした後に Consensus Commit トランザクションマネージャーを使用する場合は、次のコマンドを個別に実行し、説明に従って山括弧内の内容を置き換えます。
java -jar scalardb-schema-loader-<X.Y.Z>.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、MariaDB、と TiDB
- PostgreSQL、YugabyteDB、と AlloyDB
- Oracle
- SQL Server
- Db2
- Spanner (PostgreSQL 構文)
| MySQL/MariaDB/TiDB | ScalarDB | 注記 |
|---|---|---|
BIGINT | BIGINT | |
BINARY | BLOB | |
BIT | BOOLEAN | |
BLOB | BLOB | 下記の警告 1 を参照してください。 |
CHAR | TEXT | 下記の警告 1 を参照してください。 |
DATE | DATE | |
DATETIME | TIMESTAMP (デフォルト)、TIMESTAMPTZ | TIMESTAMPTZ としてインポートする場合、ScalarDB はデータが UTC タイムゾーンにあると想定します。下記の警告 5 を参照してください。 |
DOUBLE | DOUBLE | |
FLOAT | FLOAT | |
INT | INT | |
INT UNSIGNED | BIGINT | 下記の警告 1 を参照してください。 |
INTEGER | INT | |
LONGBLOB | BLOB | |
LONGTEXT | TEXT | |
MEDIUMBLOB | BLOB | 下記の警告 1 を参照してください。 |
MEDIUMINT | INT | 下記の警告 1 を参照してください。 |
MEDIUMTEXT | TEXT | 下記の警告 1 を参照してください。 |
SMALLINT | INT | 下記の警告 1 を参照してください。 |
TEXT | TEXT | 下記の警告 1 を参照してください。 |
TIME | TIME | |
TIMESTAMP | TIMESTAMPTZ | |
TINYBLOB | BLOB | 下記の警告 1 を参照してください。 |
TINYINT | INT | 下記の警告 1 を参照してください。 |
TINYINT(1) | BOOLEAN | |
TINYTEXT | TEXT | 下記の警告 1 を参照してください。 |
VARBINARY | BLOB | 下記の警告 1 を参照してください。 |
VARCHAR | TEXT | 下記の警告 1 を参照してください。 |
上記に記載されてい ないデータ型はサポートされていません。サポートされていない一般的なデータ型は次のとおりです。
BIGINT UNSIGNEDBIT(n)(n > 1)DECIMALENUMGEOMETRYJSONNUMERICSETYEAR
| PostgreSQL/YugabyteDB/AlloyDB | ScalarDB | 注記 |
|---|---|---|
bigint | BIGINT | |
boolean | BOOLEAN | |
bytea | BLOB | |
character | TEXT | 下記の警告 1 を参照してください。 |
character varying | TEXT | 下記の警告 1 を参照してください。 |
date | DATE | |
double precision | DOUBLE | |
integer | INT | |
real | FLOAT | |
smallint | INT | 下記の警告 1 を参照してください。 |
text | TEXT | |
time | TIME | |
timestamp | TIMESTAMP | |
timestamp with time zone | TIMESTAMPTZ |
上記に記載されていないデータ型はサポートされていません。サポートされていない一般的なデータ型は次のとおりです。
bigserialbitboxcidrcircleinetintervaljsonjsonblinelsegmacaddrmacaddr8moneynumericpathpg_lsnpg_snapshotpointpolygonsmallserialserialtime with time zonetsquerytsvectortxid_snapshotuuidxml
| Oracle | ScalarDB | 注記 |
|---|---|---|
BINARY_DOUBLE | DOUBLE | |
BINARY_FLOAT | FLOAT | |
BLOB | BLOB | 下記の警告 2 を参照してください。 |
CHAR | TEXT | 下記の警告 1 を参照してください。 |
CLOB | TEXT | |
DATE | DATE(デフォルト)、TIME、TIMESTAMP | 下記の警告 5 を参照してくだ さい。 |
FLOAT | DOUBLE | 下記の警告 3 を参照してください。 |
LONG | TEXT | |
LONG RAW | BLOB | |
NCHAR | TEXT | 下記の警告 1 を参照してください。 |
NCLOB | TEXT | |
NUMBER(p,s), p ≠ 1の場合 | BIGINT / DOUBLE | 下記の警告 4 を参照してください。 |
NUMBER(1,0) | BIGINT (デフォルト), BOOLEAN | 下記の警告 5 を参照してください。 |
NVARCHAR2 | TEXT | 下記の警告 1 を参照してください。 |
RAW | BLOB | 下記の警告 1 を参照してください。 |
TIMESTAMP | TIMESTAMP (デフォルト)、TIME | 下記の警告 5 を参照してください。 |
TIMESTAMP WITH TIME ZONE | TIMESTAMPTZ | |
TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMPTZ | |
VARCHAR2 | TEXT | 下記の警告 1 を参照してください。 |
上記に記載されていないデータ型はサポートされていません。サポートされていない一般的なデータ型は次のとおりです。
INTERVALROWIDUROWIDBFILEJSON
| SQL Server | ScalarDB | 注記 |
|---|---|---|
bigint | BIGINT | |
binary | BLOB | 下記の警告 1 を参照してください。 |
bit | BOOLEAN | |
char | TEXT | 下記の警告 1 を参照してください。 |
date | DATE | |
datetime | TIMESTAMP | |
datetime2 | TIMESTAMP | |
float | DOUBLE | |
image | BLOB | 下記の警告 6 を参照してください。 |
int | INT | |
nchar | TEXT | 下記の警告 1 を参照してください。 |
ntext | TEXT | |
nvarchar | TEXT | 下記の警告 1 を参照してください。 |
offsetdatetime | TIMESTAMPTZ | |
real | FLOAT | |
smalldatetime | TIMESTAMP | |
smallint | INT | 下記の警告 1 を参照してください。 |
text | TEXT | |
time | TIME | |
tinyint | INT | 下記の警告 1 を参照してください。 |
varbinary | BLOB | 下記の警告 1 を参照してください。 |
varchar | TEXT | 下記の警告 1 を参照してください。 |
上記に記載されていないデータ型はサポートされていません。サポートされていない一般的なデータ型は次のとおりです。
cursordecimalgeographygeometryhierarchyidmoneynumericrowversionsmallmoneysql_variantuniqueidentifierxml
| Db2 | ScalarDB | 注意事項 |
|---|---|---|
BIGINT | BIGINT | |
BINARY | BLOB | |
BLOB | BLOB | |
BOOLEAN | BOOLEAN | |
CHAR | TEXT | |
CHAR FOR BIT DATA | BLOB | |
CLOB | TEXT | |
DATE | DATE | |
DOUBLE | DOUBLE | 下記の警告 1 を参照してください。 |
FLOAT(p), with p ≤ 24 | FLOAT | 下記の警告 1 を参照してください。 |
FLOAT(p), with p ≥ 25 | DOUBLE | 下記の警告 1 を参照してください。 |
GRAPHIC | TEXT | |
INT | INT | |
NCHAR | TEXT | |
NCLOB | TEXT | |
NVARCHAR | TEXT | |
REAL | FLOAT | 下記の警告 1 を参照してください。 |
SMALLINT | INT | |
TIME | TIME | |
TIMESTAMP | TIMESTAMP (default), TIME, TIMESTAMPTZ | 下記の警告 5 を参照してください。 |
VARBINARY | BLOB | |
VARCHAR | TEXT | |
VARCHAR FOR BIT DATA | BLOB | |
VARGRAPHIC | TEXT |
上記にリストされていないデータ型はサポートされていません。以下は、サポートされていない一般的なデータ型の例です:
DECIMALDECFLOATXML
| Spanner | ScalarDB | 注意事項 |
|---|---|---|
bigint | BIGINT | |
boolean | BOOLEAN | |
bytea | BLOB | |
date | DATE | |
double precision | DOUBLE | |
real | FLOAT | |
text | TEXT | |
timestamp with time zone | TIMESTAMPTZ (default), TIME, TIMESTAMP | 下記の警告 6 を参照してください。 |
上記にリストされていないデータ型はサポートされていません。以下は、サポートされていない一般的なデータ型の例です:
arraydecimalintervaljsonbserialuuid
上記の特定のデータ型の場合、ScalarDB は基になるデータベースのデータ型よりも大きいデータ型をマップする場合があります。その場合、基になる列の制限より大きい値を挿入するとエラーが表示されます。
ScalarDB の
BLOBの最大サイズは約 2GB (正確には2^31-1バイト) です。対 照的に、Oracle のBLOBは (4GB-1)*(ブロック数) を持つことができます。したがって、インポートされたテーブルに 2GB を超えるデータが存在する場合、ScalarDB はそれを読み取ることができません。ScalarDB は、ScalarDB の
DOUBLEよりも精度の高い OracleFLOAT列をサポートしていません。ScalarDB では、ScalarDB のデータ型の最大サイズにより、
pが18より大きい場合、Oracle のNUMERIC(p, s)列 (pは精度、sはスケール) をサポートしません。sが0の場合、ScalarDB は列をBIGINTにマッピングします。それ以外の場合は、ScalarDB は列をDOUBLEにマッピングします。後者の場合、浮動小数点値が固定小数点値にキャストされるため、基になるデータベースで切り上げまたは切り捨てが発生する可能性があることに注意してください。基盤となるストレージ型は、いくつかの ScalarDB データ型にマップできます。デフォルトのマッピングをオーバーライドするには、インポートスキーマファイルの
override-columns-typeフィールドを使用します。例については、サンプルインポートスキーマファイルを参照してください。ScalarDB は、ScalarDB の
BLOB列としてインポートされた SQL Server のimage列のデータ型をTEXTに変更することをサポートしていません。
トランザクションメタデータ分離
トランザクションメタデータ分離を有効にすることで、トランザクションメタデータをアプリケーションデータから分離して管理できます。
インポートされたテーブルでトランザクションメタデータをデカップリングするには、次の例に示すように、インポートスキーマファイルに transaction-metadata-decoupling フィールドを true の値で追加します:
{
"sample_namespace.sample_table": {
"transaction-metadata-decoupling": true
}
}
インポートされたテーブル名は、元のテーブル名に _scalardb 接尾辞が追加されたものになるため、<table_name>_scalardb としてアクセスできます。
トランザクションメタデータ分離の詳細については、トランザクションメタデータ分離を参照してください。
アプリケーションでインポート機能を使用する
次のインターフェースを使用して、アプリケーションでインポート機能を使用できます。