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

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 のセットアップ

  1. ScalarDB Releases ページから最新の Data Loader リリースをダウンロードします。
  2. 以下のコマンドを実行して、<VERSION> をバージョン番号に置き換えてインストールを確認します:
java -jar scalardb-data-loader-<VERSION>.jar --help

成功すると、利用可能なコマンドとオプションのリストが表示されます。

データのインポート

このセクションでは、Data Loader のインポート機能の使用方法について説明します。

基本的なインポートの例

データをインポートする最も簡単な方法は、自動フィールドマッピングを使用することです。これにより、Data Loader がソースファイルのフィールドを名前でテーブルカラムにマッチングします。

Data Loader は3つのファイル形式をサポートしています: JSON、JSONL (JSON Lines)、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
}
]

一般的なインポートシナリオ

このセクションでは、一般的なインポートシナリオについて説明します。

新しいレコードを挿入する代わりに既存のレコードを更新する

新しいレコードを挿入する代わりに既存のレコードを更新するには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:

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 のインポート機能で使用できるオプションのリストです:

オプション説明使用法
--modeScalarDB が動作するモード。サポートされるモードは STORAGETRANSACTION です。省略した場合、デフォルト値は STORAGE です。scalardb-data-loader --mode TRANSACTION
--configScalarDB 用の .properties ファイルへのパス。省略した場合、ツールは現在のフォルダで scalardb.properties という名前のファイルを探します。scalardb-data-loader --config scalardb.properties
--namespaceデータをインポートするテーブルのネームスペース。制御ファイルが提供されていない場合は必須です。scalardb-data-loader --namespace namespace
--tableデータをインポートするテーブルの名前。制御ファイルが提供されていない場合は必須です。scalardb-data-loader --table tableName
--import-modeScalarDB テーブルにデータをインポートするモード。サポートされるモードは INSERTUPDATEUPSERT です。オプション。デフォルト値は 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>
--enable-log-success正常に処理されたレコードのログ記録を有効にします。オプション。デフォルト値は false です。scalardb-data-loader --enable-log-success
--log-raw-recordログファイル出力に元のソースレコードを含めます。オプション。デフォルト値は false です。scalardb-data-loader --log-raw-record
--max-threads並列処理に使用する最大スレッド数。デフォルト値は利用可能なプロセッサ数です。scalardb-data-loader --max-threads 10
--formatインポートファイルの形式。サポートされる形式は JSONJSONLCSV です。オプション。デフォルト値は 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制御ファイルの検証レベル。サポートされるレベルは MAPPEDKEYSFULL です。オプション。デフォルトレベルは 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 引数で渡す必要があります。

制御ファイル検証レベル

制御ファイルに対する検証を強制するため、Data Loader では検証レベルを指定できます。設定されたレベルに基づいて、Data Loader は事前チェックを実行し、レベルルールに基づいて制御ファイルを検証します。

以下のレベルがサポートされています:

レベル検証内容使用タイミング
FULLすべてのテーブルカラムにマッピングがある制御ファイルがすべてのカラムをカバーしていることを確認する場合
KEYSパーティションキーとクラスタリングキーのみにマッピングがあるキーカラムのみを考慮する部分更新の場合
MAPPED (デフォルト)指定したマッピングのみが有効制御ファイルを信頼し、最小限の検証を行う場合

検証レベルはオプションであり、Data Loader を開始するときに --control-file-validation 引数で設定できます。

注記

この検証は事前チェックとして実行され、インポートプロセスが自動的に成功することを意味するものではありません。

たとえば、レベルが MAPPED に設定され、制御ファイルに INSERT 操作の各カラムのマッピングが含まれていない場合、INSERT 操作ではすべてのカラムのマッピングが必要であるため、インポートプロセスは依然として失敗します。

マルチテーブルインポート

Data Loader はマルチテーブルターゲットインポートをサポートしており、制御ファイルでテーブルマッピングルールを指定することにより、JSON、JSON Lines、または CSV ファイルの単一行を複数のテーブルにインポートできます。

注記

マルチテーブルインポートには制御ファイルが必要です。この機能は制御ファイルなしではサポートされていません。

ScalarDB TRANSACTION モードでマルチテーブルインポートを使用する場合、ソース行がインポートされる各テーブルに対して個別のトランザクションが作成されます。たとえば、ソース行が制御ファイル内の2つのテーブルにマッピングされている場合、2つの個別のトランザクションが作成されます。

例: 1つのソース行を複数のテーブルにインポート

複数のフィールドを持つ JSON ソースレコード:

[{
"field1": "value1",
"field2": "value2",
"field3": "value3"
}]

異なるフィールドを異なるテーブルにマッピングする制御ファイルを使用して複数のテーブルにインポートできます:

{
"tables": [{
"namespace": "<NAMESPACE>",
"table_name": "<TABLE1>",
"mappings": [{
"source_field": "field1",
"target_column": "<COLUMN1>"
}, {
"source_field": "field2",
"target_column": "<COLUMN2>"
}]
},
{
"namespace": "<NAMESPACE>",
"table_name": "<TABLE2>",
"mappings": [{
"source_field": "field1",
"target_column": "<COLUMN1>"
}, {
"source_field": "field3",
"target_column": "<COLUMN3>"
}]
}
]
}

この設定では、field1field2<TABLE1> に、field1field3<TABLE2> にインポートします。

出力ログ

Data Loader は、すべてのインポート操作について、成功したレコードと失敗したレコードの両方を追跡する詳細なログファイルを作成します。

ログファイルの場所

デフォルトでは、Data Loader は logs/ ディレクトリに2つのログファイルを生成します:

  • 成功ログ: 正常にインポートされたすべてのレコードが含まれます。
  • 失敗ログ: インポートに失敗したレコードとエラーの詳細が含まれます。

--log-dir オプションを使用してログディレクトリを変更できます。

ログの理解

両方のログファイルには、各レコードに追加された data_loader_import_status フィールドが含まれます:

成功ログ内:

  • 各レコードが挿入 (新規) されたか更新 (既存) されたかを示します。
  • TRANSACTION モードで実行時にトランザクションの詳細を含みます。

失敗ログ内:

  • 各レコードがインポートに失敗した理由を説明します。
  • 特定の検証エラーまたは制約違反をリストします。

失敗したインポートの再試行

失敗ログは簡単に復旧できるように設計されています:

  1. 失敗したレコードを編集 失敗ログ内で問題を修正します (たとえば、不足しているカラムの追加や無効な値の修正)。
  2. 編集されたファイルを直接使用 新しいインポート操作の入力として使用します。
  3. クリーンアップ不要 data_loader_import_status フィールドは再インポート時に自動的に無視されるためです。
ヒント

正常にインポートされたレコードをログに記録するには --enable-log-success を有効にし、ログ出力に元のソースデータを含めるには --log-raw-record を使用してください。

ログ形式

フィールド説明
actionデータレコードのインポートプロセスの結果: UPDATE、INSERT、または FAILED_DURING_VALIDATION。
namespaceデータがインポートされるテーブルのネームスペースの名前。
tableNameデータがインポートされるテーブルの名前。
is_data_mapped利用可能な制御ファイルに基づいてカスタムデータマッピングが適用されたかどうか。
tx_idトランザクション ID。Data Loader が TRANSACTION モードで実行されている場合のみ利用可能。
valueオプションのデータマッピング後に、Data Loader が PUT 操作で使用する最終値。
row_numberソースデータの行番号またはレコード番号。
errorsインポートプロセス中に失敗した操作の検証またはその他のエラーのリスト。

以下は、成功したインポートを示す JSON 形式のログファイルの例です:

[{
"column_1": 1,
"column_2": 2,
"column_n": 3,
"data_loader_import_status": {
"results": [{
"action": "UPDATE",
"namespace": "namespace1",
"tableName": "table1",
"is_data_mapped": true,
"tx_id": "value",
"value": "value",
"row_number": "value"
}]
}
}]

以下は、失敗したインポートの JSON 形式のログファイルの例です:

[{
"column_1": 1,
"column_2": 2,
"column_n": 3,
"data_loader_import_status": {
"results": [{
"action": "FAILED_DURING_VALIDATION",
"namespace": "namespace1",
"tableName": "table1",
"is_data_mapped": false,
"value": "value",
"row_number": "value",
"errors": [
"missing columns found during validation"
]
}]
}
}]

重複データ

警告

インポートファイルに同じパーティションキーおよび/またはクラスタリングキーを持つ重複レコードが含まれていないことを確認してください。Data Loader はソースファイル内の重複を検出または防止しません。

ScalarDB TRANSACTION モードでは、同じターゲットデータを短時間で更新しようとすると No Mutation エラーが発生します。Data Loader はこれらのエラーを自動的に処理しません。失敗したデータ行は失敗インポート結果出力ファイルにログ記録され、必要に応じて後で確認および再インポートできます。

データのエクスポート

このセクションでは、Data Loader のエクスポート機能の使用方法について説明します。

基本的なエクスポートの例

データをエクスポートする最も簡単な方法は、テーブル全体をエクスポートすることです。Data Loader は ScalarDB スキャン操作を実行し、結果をファイルにエクスポートします。

Data Loader は3つのエクスポート形式をサポートしています: JSON、JSONL (JSON Lines)、CSV。以下の例では、各形式へのエクスポート方法を示します。

テーブル全体を JSON にエクスポート

テーブルを JSON 形式にエクスポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:

java -jar scalardb-data-loader-<VERSION>.jar export \
--config scalardb.properties \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--format json

このコマンドは、指定されたテーブルのすべてのデータを現在のディレクトリの JSON ファイルにエクスポートします。出力ファイルは export.<namespace>.<table>.<timestamp>.json という形式で自動的に名前が付けられます。

JSON 出力形式の例:

[
{
"id": 1,
"name": "Product A",
"price": 100
},
{
"id": 2,
"name": "Product B",
"price": 200
}
]

一般的なエクスポートシナリオ

以下は、一般的なデータエクスポートシナリオです。

特定のファイルと形式にデータをエクスポート

特定のファイルと形式にデータをエクスポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:

java -jar scalardb-data-loader-<VERSION>.jar export \
--config scalardb.properties \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--output-file <OUTPUT_FILE_PATH>.csv \
--format csv

特定のカラムのみをエクスポート

特定のカラムのみをエクスポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:

java -jar scalardb-data-loader-<VERSION>.jar export \
--config scalardb.properties \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--projection <COLUMN1>,<COLUMN2>,<COLUMN3>

特定のパーティションキーのデータをエクスポート

特定のパーティションキーのデータをエクスポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:

java -jar scalardb-data-loader-<VERSION>.jar export \
--config scalardb.properties \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--partition-key <KEY_NAME>=<VALUE>

行数制限でエクスポート

行数制限でエクスポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:

java -jar scalardb-data-loader-<VERSION>.jar export \
--config scalardb.properties \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--limit 1000

コマンドラインオプション

以下は、Data Loader のエクスポート機能で使用できるオプションのリストです:

オプション説明使用法
--configScalarDB 用の .properties ファイルへのパス。省略した場合、ツールは現在のフォルダで scalardb.properties という名前のファイルを探します。scalardb-data-loader --config scalardb.properties
--namespaceテーブルデータをエクスポートするネームスペース。必須。scalardb-data-loader --namespace namespace
--tableデータをエクスポートするテーブルの名前。必須。scalardb-data-loader --table tableName
--partition-keyデータをエクスポートする特定のパーティションキー。key=value 形式で指定します。デフォルトでは、このオプションは指定されたテーブルのすべてのデータをエクスポートします。scalardb-data-loader --partition-key id=100
--sort-byクラスタリングキーのソート順。サポートされる値は ascdesc です。このオプションは --partition-key を使用する場合にのみ適用されます。scalardb-data-loader --sort-by asc
--projectionエクスポートに含めるカラム。カンマ区切りのリストとして提供します。引数を繰り返して複数のプロジェクションを提供することもできます。scalardb-data-loader --projection column1,column2
--start-keyスキャンの開始を示すクラスタリングキーと値。key=value 形式で指定します。このオプションは --partition-key を使用する場合にのみ適用されます。scalardb-data-loader --start-key timestamp=1000
--start-inclusive開始キーを包括的にします。デフォルト値は true です。このオプションは --partition-key を使用する場合にのみ適用されます。scalardb-data-loader --start-inclusive false
--end-keyスキャンの終了を示すクラスタリングキーと値。key=value 形式で指定します。このオプションは --partition-key を使用する場合にのみ適用されます。scalardb-data-loader --end-key timestamp=9999
--end-inclusive終了キーを包括的にします。デフォルト値は true です。このオプションは --partition-key を使用する場合にのみ適用されます。scalardb-data-loader --end-inclusive false
--limitエクスポートする最大行数。省略した場合、制限はありません。scalardb-data-loader --limit 1000
--output-dirエクスポートされたファイルを保存するディレクトリ。デフォルトは現在のディレクトリです。

注意: Data Loader は出力ディレクトリを作成しないため、ディレクトリが既に存在している必要があります。
scalardb-data-loader --output-dir ./exports
--output-fileエクスポートされたデータの出力ファイル名。省略した場合、ツールは以下の名前形式でファイルを保存します:
export.<namespace>.<table>.<timestamp>.<format>
scalardb-data-loader --output-file output.json
--formatエクスポートされたデータファイルの形式。サポートされる形式は JSONJSONLCSV です。デフォルト値は JSON です。scalardb-data-loader --format CSV
--include-metadataエクスポートされたデータにトランザクションメタデータを含めます。デフォルト値は false です。scalardb-data-loader --include-metadata
--delimiter(CSV のみ) CSV ファイルの区切り文字。デフォルトの区切り文字はカンマです。scalardb-data-loader --delimiter ";"
--no-header(CSV のみ) CSV ファイルでヘッダー行を除外します。デフォルト値は false です。scalardb-data-loader --no-header
--pretty-print(JSON/JSONL のみ) JSON 出力をプリティプリントします。デフォルト値は false です。scalardb-data-loader --pretty-print
--data-chunk-size次のバッチに移る前に処理のためにメモリにロードするレコード数。これはメモリ使用量を制御します。デフォルト値は 200 です。scalardb-data-loader --data-chunk-size 500
--max-threads並列処理に使用する最大スレッド数。デフォルト値は利用可能なプロセッサ数です。scalardb-data-loader --max-threads 10