ScalarDB Data Loader
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
ScalarDB Data Loader は、ScalarDB に対してデータのインポートとエクスポートを簡単に行うことができるユーティリティツールです。
Data Loader は、検証、エラーハンドリング、詳細なログ記録を備えた構造化されたインポートおよびエクスポートプロセスを提供し、ScalarDB との間で安全にデータを移動できるように支援します。
- Data Loader は現在 ScalarDB Core 上に構築されているため、バックエンドデータベースに対して直接データのインポートとエクスポートのみを行うことができます。そのため、ScalarDB Cluster 経由でのデータのインポートとエクスポートはできません。
前提条件
Data Loader を使用する前に、以下が必要です:
以下のいずれかの Java Development Kit (JDK):
- Oracle JDK: 8、11、17、または 21 (LTS バージョン)
- OpenJDK (Eclipse Temurin、Amazon Corretto、または Microsoft Build of OpenJDK): 8、11、17、または 21 (LTS バージョン)
- データベース接続設定を含む有効な
scalardb.properties設定ファイル - 読み取りおよび書き込み操作に対する適切な権限を持つデータベースへのアクセス。必要な権限の詳細については、データベース権限要件を参照してください。
Data Loader のセットアップ
- ScalarDB Releases ページから最新の Data Loader リリースをダウンロードします。
- 以下のコマンドを実行して、
<VERSION>をバージョン番号に置き換えてインストールを確認します:
java -jar scalardb-data-loader-<VERSION>.jar --help
成功すると、利用可能なコマンドとオプションのリストが表示されます。
データのインポート
このセクションでは、Data Loader のインポート機能の使用方法について説明します。
基本的なインポートの例
データをインポートする最も簡単な方法は、自動フィールドマッピングを使用することです。これにより、Data Loader がソースファイルのフィールドを名前でテーブルカラムにマッチングします。
Data Loader は3つのファイル形式をサポートしています: JSON、JSONL (JSON Lines)、CSV。以下の例では、各形式をインポートする方法を示します。
- JSON
- JSONL
- CSV
自動マッピングでの JSON ファイルのインポート
JSON ファイルをテーブルにインポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.json
このコマンドは、デフォルト設定 (INSERT モード、自動フィールドマッピング) を使用して、JSON ファイルを指定されたテーブルにインポートします。
JSON ファイル形式の例:
[
{
"id": 1,
"name": "Product A",
"price": 100
},
{
"id": 2,
"name": "Product B",
"price": 200
}
]
自動マッピングでの JSONL (JSON Lines) ファイルのインポート
JSONL ファイルをテーブルにインポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.jsonl \
--format JSONL
このコマンドは、デフォルト設定 (INSERT モード、自動フィールドマッピング) を使用して、JSONL ファイルを指定されたテーブルにインポートします。
JSONL ファイル形式の例:
{"id": 1, "name": "Product A", "price": 100}
{"id": 2, "name": "Product B", "price": 200}
自動マッピングでの CSV ファイルのインポート
CSV ファイルをテーブルにインポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.csv \
--format CSV
このコマンドは、デフォルト設定 (INSERT モード、自動フィールドマッピング) を使用して、CSV ファイルを指定されたテーブルにインポートします。
CSV ファイル形式の例:
id,name,price
1,Product A,100
2,Product B,200
CSV ファイルには、テーブルカラムに一致するカラム名を持つヘッダー行が含まれている必要があります。CSV ファイルにヘッダー行がない場合は、--header オプションを使用してカラム名を指定してください。
一般的なインポートシナリオ
このセクションでは、一般的なインポートシナリオについて説明します。
新しいレコードを挿入する代わりに既存のレコードを更新する
新しいレコードを挿入する代わりに既存のレコードを更新するには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.json \
--import-mode UPDATE
制御ファイルを使用したカスタムフィールドマッピングでのインポート
ソースファイルのフィールドがテーブルのカラム名と一致しない場合、制御ファイルを使用してカスタムマッピングルールを定義できます。制御ファイルの作成とマッピング設定の詳細については、カスタムデータマッピングを参照してください。
制御ファイルを使用してカスタムフィールドマッピングでインポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--file <FILE>.json \
--control-file <CONTROL_FILE>.json
カスタム区切り文字での CSV データのインポート
カスタム区切り文字で CSV データをインポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.csv \
--format CSV \
--delimiter ";"
インポートの設定
インポートプロセスをより詳細に制御するために、さまざまなオプションを設定できます:
インポートモード
使用ケースに基づいて適切なインポートモードを選択します:
- INSERT (デフォルト): 新しいレコードのみを挿入します。パーティションキーとクラスタリングキーに基づいてデータが既に存在する場合は失敗します。
- UPDATE: 既存のレコードのみを更新します。データが存在しない場合は失敗します。
- UPSERT: パーティションキーとクラスタリングキーに基づいて、新しいレコードを挿入するか既存のレコ ードを更新します。
INSERT モードを使用する場合、各ターゲットカラムに対してソースファイル内に一致するフィールドが必要です (自動またはカスタムデータマッピング経由)。この要件は、UPSERT 操作が INSERT 操作になる場合にも適用されます。
ScalarDB モード
スキーマタイプに基づいて、以下のいずれかのモードを使用できます:
-
TRANSACTION: スキーマ内にトランザクションメタデータを持つデータベースに対してこのモードを使用します。トランザクション操作を使用して行がインポートされ、ACID プロパティとデータ整合性が保証されます。デフォルトでは、最大 100 個の put 操作が単一のトランザクションにグループ化されます。これは--transaction-sizeオプションを使用して調整できます。注記TRANSACTIONモードを使用する場合、各トランザクショングループ (デフォルトでは 100 レコードを含む) は ACID 保証を満たしますが、全体的なインポートまたはエクスポート操作はアトミックではありません。中断された場合、一部のグループはコミットされ、他のグループはコミットされない可能性があります。ログファイルを使用して失敗したレコードを特定し、再試行してください。 -
STORAGE(デフォルト): スキーマ内にトランザクションメタデータを持たないデータベースに対してこのモードを使用します。このモードは、完全な ACID 保証なしに、より良いパフォーマンスのために非トランザクション Storage 操作を使用して直接データベースインポートを実行します。
検証、ログ記録、パフォーマンスチ ューニングを含む追加の設定オプションについては、以下のコマンドラインオプションセクションを参照してください。
コマンドラインオプション
以下は、Data Loader のインポート機能で使用できるオプションのリストです:
| オプション | 説明 | 使用法 |
|---|---|---|
--mode | ScalarDB が動作するモード。サポートされるモードは STORAGE と TRANSACTION です。省略した場合、デフォルト値は STORAGE です。 | scalardb-data-loader --mode TRANSACTION |
--config | ScalarDB 用の .properties ファイルへのパス。省略した場合、ツールは現在のフォルダで scalardb.properties という名前のファイルを探します。 | scalardb-data-loader --config scalardb.properties |
--namespace | データをインポートするテーブルのネームスペース。制御ファイルが提供されていない場合は必須です。 | scalardb-data-loader --namespace namespace |
--table | データをインポートするテーブルの名前。制御ファイルが提供されていない場合は必須です。 | scalardb-data-loader --table tableName |
--import-mode | ScalarDB テーブルにデータをインポートするモード。サポートされるモードは INSERT、UPDATE、UPSERT です。オプション。デフォルト値は INSERT です。 | scalardb-data-loader --import-mode UPDATE |
--require-all-columns | 設定した場合、カラムが不足している場合はデータ行をインポートできません。オプション。デフォルト値は false です。 | scalardb-data-loader --require-all-columns |
--file | インポートされるファイルへのパス。必須。 | scalardb-data-loader --file <PATH_TO_FILE> |
--log-dir | ログファイルを保存するディレクトリ。オプション。デフォルト値は logs です。 | scalardb-data-loader --log-dir <PATH_TO_DIR> |
--log-success | 正常に処理されたレコードのログ記録を有効にします。オプション。デフォルト値は false です。 | scalardb-data-loader --log-success |
--log-raw-record | ログファイル出力に元のソースレコードを含めます。オプション。デフォルト値は false です。 | scalardb-data-loader --log-raw-record |
--max-threads | 並列処理に使用する最大スレッド数。デフォルト値は利用可能なプロセッサ数です。 | scalardb-data-loader --max-threads 10 |
--format | インポートファイルの形式。サポートされる形式は JSON、JSONL、CSV です。オプション。デフォルト値は JSON です。 | scalardb-data-loader --format CSV |
--ignore-nulls | インポート時にソースファイル内の null 値を無視します。これは、既存のデータが null 値で上書きされないことを意味します。オプション。デフォルト値は false です。 | scalardb-data-loader --ignore-nulls |
--pretty-print | (JSON/JSONL のみ) ログファイル内の JSON 出力でプリティプリントを有効にします。オプション。デフォルト値は false です。 | scalardb-data-loader --pretty-print |
--control-file | カスタムデータマッピングおよび/またはマルチテーブルインポートのルールを指定する JSON 制御ファイルへのパス。 | scalardb-data-loader --control-file control.json |
--control-file-validation | 制御ファイルの検証レベル。サポートされるレベルは MAPPED、KEYS、FULL です。オプション。デフォルトレベルは MAPPED です。 | scalardb-data-loader --control-file-validation FULL |
--delimiter | (CSV のみ) CSV インポートファイルで使用される区切り文字。デフォルトの区切り文字はカンマです。 | scalardb-data-loader --delimiter ";" |
--header | (CSV のみ) インポートファイルに CSV データが含まれ、ヘッダー行がない場合にヘッダー行を指定します。カラム名を単一の区切り文字で区切ったリストとして提供します。--delimiter を変更した場合は、ヘッダー値で同じ区切り文字を使用してください。 | scalardb-data-loader --header id,name,price |
--data-chunk-size | 次のバッチに移る前に処理のためにメモリにロードするレコード数。これはメモリ使用量を制御し、トランザクション境界ではありません。オプション。デフォルト値は 500 です。 | scalardb-data-loader --data-chunk-size 1000 |
--data-chunk-queue-size | 処理を待っているロードされたレコードの最大キューサイズ。オプション。デフォルト値は 256 です。 | scalardb-data-loader --data-chunk-queue-size 100 |
--split-log-mode | データチャンクに基づいてログファイルを複数のファイルに分割します。オプション。デフォルト値は false です。 | scalardb-data-loader --split-log-mode |
--transaction-size | トランザクションコミットあたりの put 操作のグループサイズ。単一のトランザクションで一緒にコミットされるレコード数を指定します。TRANSACTION モードでのみサポートされます。オプション。デフォルト値は 100 です。 | scalardb-data-loader --transaction-size 200 |
データマッピング
このセクションでは、2つのデータマッピングタイプ (自動データマッピングとカスタムデータマッピング) について説明します。
自動データマッピング
制御ファイルが提供されていない場合、Data Loader はソースデータ内のフィールドを ScalarDB テーブル内の利用可能なカラムに自動的にマッピングします。名前が一致せず、すべてのカラムが必要な場合、検証エラーが発生します。この場合、レコードのインポートが失敗し、結果が失敗出力ログに追加されます。
カスタムデータマッピング
ソースフィールドがターゲットカラム名と一致しない場合、制御ファイルを使用する必要があります。制御ファイルでは、フィールド名のカスタムマッピングルールを指定する必要があります。
たとえば、以下の制御ファイルは、ソースファイル内のフィールド source_field_name をターゲットテーブル内の target_column_name にマッピングします:
{
"tables": [{
"namespace": "<NAMESPACE>",
"table_name": "<TABLE>",
"mappings": [{
"source_field": "<SOURCE_FIELD_NAME>",
"target_column": "<TARGET_COLUMN_NAME>"
}]
}
]
}
制御ファイル
カスタムデータマッピングまたはマルチテーブルインポートを可能にするために、Data Loader は JSON 制御ファイルによる設定をサポートしています。このファイルは、Data Loader を開始するときに --control-file 引数で渡す必要があります。