ScalarDB Data Loader
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
ScalarDB Data Loader は、ScalarDB に対してデータのインポートとエクスポートを簡単に行うことができるユーティリティツールです。
Data Loader は、検証、エラーハンドリング、詳細なログ記録を備えた構造化されたインポートおよびエクスポートプロセスを提供し、ScalarDB との間で安全にデータを移動できるように支援します。
使用ケースに基づいた適切な設定の選択
以下の判断ツリーを使用して、あなたの使用ケースに適した設定パターンを決定してください:
Consensus Commit を使用している場合、SERIALIZABLE 分離が必要ならクラスターを停止してください。READ COMMITTED 分離で問題なければ、クラスターを停止する必要はありません。
設定パターン
判断ツリーに基づいて、設定パターンを選択してください:
- A/C: データベースに直接アクセス
- B: ScalarDB Cluster 経由でデータベースにアクセス
- D/F: データベースに直接アクセス
- E: ScalarDB Cluster 経由でデータベースにアクセス
Consensus Commit トランザクションが必要で、データベースに直接アクセスする場合 (ScalarDB Cluster がない、または大量のデータをインポート/エクスポートする場合) に、このパターンを使用してください。行はトランザクション操作を使用してインポートされ、ACID プロパティが確保されます。デフォルトでは、最大100個の put 操作が単一のトランザクションにグループ化されます。これは --transaction-size オプションを使用して調整できます。
クライアント設定 (Data Loader 用の scalardb.properties):
# Consensus Commit によるデータベース直接アクセス用トランザクションマネージャー
scalar.db.transaction_manager=consensus-commit
# ストレージ設定 (PostgreSQL の例)
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:postgresql://<DATABASE_HOST>:5432/<DATABASE_NAME>
scalar.db.username=<USERNAME>
scalar.db.password=<PASSWORD>
その他のデータベース設定については、ScalarDB Core の設定を参照して ください。
インポートコマンドを実行する際は、--mode TRANSACTION を使用してください。エクスポートコマンドでは --mode 引数は必要ありません。
Consensus Commit トランザクションマネージャーを使用する場合、各トランザクショングループ (デフォルトでは 100 レコード) は ACID 保証を満たしますが、インポートまたはエクスポート操作全体はアトミックではありません。中断された場合、一部のグループがコミットされ、他のグループがコミットされない可能性があります。ログファイルを使用して失敗したレコードを特定し、再試行してください。
データの整合性を確保するため:
- ScalarDB Cluster がある場合 (パターン A): インポートまたはエクスポート操作中にクラスターを停止してください。
- ScalarDB Cluster がない場合 (パターン C): 操作中にデータベースを更新する他のプロセスを停止してください。
Consensus Commit トランザクション用に設定された ScalarDB Cluster があり、大量のデータをインポートまたはエクスポートしていない場合に、このパターンを使用してください。
クライアント設定 (Data Loader 用の scalardb.properties):
# ScalarDB Cluster に接続するためのトランザクションマネージャー
scalar.db.transaction_manager=cluster
# クラスターの接続ポイント (ロードバランサーのアドレスを使用)
scalar.db.contact_points=indirect:<SCALARDB_CLUSTER_HOST>
# オプション: ポート番号 (デフォルトは 60053)
scalar.db.contact_port=60053
<SCALARDB_CLUSTER_HOST> を ScalarDB Cluster エンドポイント (例: localhost または 192.168.10.1) に置き換えてください。
クラスター設定 (scalardb-cluster-node.properties):
# クラスター側のト ランザクションマネージャー
scalar.db.transaction_manager=consensus-commit
# 分離レベル (SNAPSHOT、SERIALIZABLE、または READ_COMMITTED)
scalar.db.consensus_commit.isolation_level=SNAPSHOT
# ストレージ設定 (PostgreSQL の例)
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:postgresql://<DATABASE_HOST>:5432/<DATABASE_NAME>
scalar.db.username=<USERNAME>
scalar.db.password=<PASSWORD>
その他のデータベース設定については、ScalarDB Cluster の設定を参照してください。
インポートコマンドを実行する際は、--mode TRANSACTION を使用してください。エクスポートコマンドでは --mode 引数は必要ありません。
データの整合性を確保するため、インポートまたはエクスポート操作中に ScalarDB Cluster を通じてデー タベースを更新する他のプロセスを停止してください。
非トランザクション Storage 操作が必要で、データベースに直接アクセスする場合 (ScalarDB Cluster がない、または大量のデータをインポート/エクスポートする場合) に、このパターンを使用してください。
クライアント設定 (Data Loader 用の scalardb.properties):
# データベース直接アクセス用トランザクションマネージャー (非トランザクション)
scalar.db.transaction_manager=single-crud-operation
# ストレージ設定 (PostgreSQL の例)
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:postgresql://<DATABASE_HOST>:5432/<DATABASE_NAME>
scalar.db.username=<USERNAME>
scalar.db.password=<PASSWORD>
その他のデータベース設定については、ScalarDB Core の設定を参照してください。
インポートコマンドを実行する際は、--mode STORAGE を使用してください。エクスポートコマンドでは --mode 引数は必要ありません。
非トランザクション Storage 操作用に設定された ScalarDB Cluster があり、大量のデータをインポートまたはエクスポートしていない場合に、このパターンを使用してください。
クライアント設定 (Data Loader 用の scalardb.properties):
# ScalarDB Cluster に接続するためのトランザクションマネージャー
scalar.db.transaction_manager=cluster
# クラスターの接続ポイント (ロードバランサーのアドレスを使用)
scalar.db.contact_points=indirect:<SCALARDB_CLUSTER_HOST>
# オプション: ポート番号 (デフォルトは 60053)
scalar.db.contact_port=60053
<SCALARDB_CLUSTER_HOST> を ScalarDB Cluster エンドポイント (例: localhost または 192.168.10.1) に置き換えてください。
クラスター設定 (scalardb-cluster-node.properties):
# クラスター側のトランザクションマネージャー (非トランザクション)
scalar.db.transaction_manager=single-crud-operation
# ストレージ設定 (PostgreSQL の例)
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:postgresql://<DATABASE_HOST>:5432/<DATABASE_NAME>
scalar.db.username=<USERNAME>
scalar.db.password=<PASSWORD>
その他のデータベース設定については、ScalarDB Cluster の設定を参照してください。
インポートコマンドを実行する際は、--mode STORAGE を使用してください。エクスポートコマンドでは --mode 引数は必要ありません。
前提条件
- ScalarDB Cluster
- データベース直接アクセス
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 Cluster の接続設定 (クラスターエンドポイントとポート) で設定された有効な
scalardb.propertiesファイル - 実行中の 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 Cluster
- データベース直接アクセス
希望の方法を選択して Data Loader をセットアップし、コマンドに従ってください。
- Fat JAR
- Docker コンテナ
ScalarDB Releases ページから scalardb-cluster-data-loader-<VERSION>-all.jar をダウンロードしてください。
以下のコマンドを実行して、<VERSION> をバージョン番号に置き換えてインストールを確認します:
java -jar scalardb-cluster-data-loader-<VERSION>-all.jar --help
成功すると、利用可能なコマンドとオプションのリストが表示されます。
以下のコマンドを実行して、Scalar コンテナレジストリから Docker イメージを取得できます。角括弧内の内容を説明どおりに置き換えてください:
docker pull ghcr.io/scalar-labs/scalardb-cluster-data-loader-cli:<VERSION>
コンテナを使用して Data Loader コマンドを実行できます。以下の例では、インストールを確認する方法を示しています:
docker run --rm ghcr.io/scalar-labs/scalardb-cluster-data-loader-cli:<VERSION> --help
成功すると、利用可能なコマンドとオプションのリストが表示されます。
このドキュメントのすべてのコマンド例は JAR ファイルの構文を使用しています。java -jar scalardb-cluster-data-loader-<VERSION>-all.jar を Docker 等価コマンドに置き換え、ローカルファイルをボリュームとしてマウントすることで、コンテナで同じコマンドを実行できます。例:
# JAR 構文
java -jar scalardb-cluster-data-loader-<VERSION>-all.jar import \
--config scalardb.properties --file data.json ...
# Docker 等価コマンド
docker run --rm \
-v ./scalardb.properties:/scalardb.properties \
-v ./data.json:/data.json \
ghcr.io/scalar-labs/scalardb-cluster-data-loader-cli:<VERSION> \
import --config /scalardb.properties --file /data.json ...
希望の方法を選択して Data Loader をセットアップし、コマンドに従ってください。
- Fat JAR
- Docker コンテナ
ScalarDB Releases ページから scalardb-data-loader-<VERSION>.jar をダウンロードしてください。
以下のコマンドを実行して、<VERSION> をバージョン番号に置き換えてインストールを確認します:
java -jar scalardb-data-loader-<VERSION>.jar --help
成功すると、利用可能なコマンドとオプションのリストが表示されます。
以下のコマンドを実行して、Scalar コンテナレジストリから Docker イメージを取得できます。角括弧内の内容を説明どおりに置き換えてください:
docker pull ghcr.io/scalar-labs/scalardb-data-loader-cli:<VERSION>
コンテナを使用して Data Loader コマンドを実行できます。以下の例では、インストールを確認する方法を示しています:
docker run --rm ghcr.io/scalar-labs/scalardb-data-loader-cli:<VERSION> --help
成功すると、利用可能なコマンドとオプションのリストが表示されます。
このドキュメントのすべてのコマンド例は JAR ファイルの構文を使用しています。java -jar scalardb-data-loader-<VERSION>.jar を Docker 等価コマンドに置き換え、ローカルファイルをボリュームとしてマウントすることで、コンテナで同じコマンドを実行できます。例:
# JAR 構文
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties --file data.json ...
# Docker 等価コマンド
docker run --rm \
-v ./scalardb.properties:/scalardb.properties \
-v ./data.json:/data.json \
ghcr.io/scalar-labs/scalardb-data-loader-cli:<VERSION> \
import --config /scalardb.properties --file /data.json ...
データのインポート
このセクションでは、Data Loader のインポート機能の使用方法について説明します。
基本的なインポートの例
データをインポートする最も簡単な方法は、自動フィールドマッピングを使用することです。これにより、Data Loader がソースファイルのフィールドを名前でテーブルカラムにマッチングします。
Data Loader は3つのファイル形式をサポートしています: JSON、JSONL (JSON Lines)、CSV。以下の例では、各形式をインポートする方法を示します。
- JSON
- JSONL
- CSV
自動マッピングでの JSON ファイルのインポート
JSON ファイルをテーブルにインポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
- ScalarDB Cluster
- データベース直接アクセス
java -jar scalardb-cluster-data-loader-<VERSION>-all.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.json \
--format JSON
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.json \
--format JSON
このコマンドは、デフォルト設定 (INSERT モード、自動フィールドマッピング) を使用して、JSON ファイルを指定されたテーブルにインポートします。
JSON ファイル形式の例:
[
{
"id": 1,
"name": "Product A",
"price": 100
},
{
"id": 2,
"name": "Product B",
"price": 200
}
]
自動マッピングでの JSONL (JSON Lines) ファイルのインポート
JSONL ファイルをテーブルにインポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
- ScalarDB Cluster
- データベース直接アクセス
java -jar scalardb-cluster-data-loader-<VERSION>-all.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.jsonl \
--format JSONL
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--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 ファイルをテーブルにインポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
- ScalarDB Cluster
- データベース直接アクセス
java -jar scalardb-cluster-data-loader-<VERSION>-all.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.csv \
--format CSV
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--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 オプションを使用してカラム名を指定してください。
データベース直接アクセスでデータをインポートする場合は、データの整合性を確保するために以下に注意してください:
- 環境に ScalarDB Cluster がある場合: 操作中にクラスターを停止してください。
- ScalarDB Cluster がない場合: 操作中にデータベースを更新する他のプロセスを停止してください。
一般的なインポートシナリオ
このセクションでは、一般的なインポートシナリオについて説明します。
新しいレコードを挿入する代わりに既存のレコードを更新する
新しいレコードを挿入する代わりに既存のレコードを更新するには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
- ScalarDB Cluster
- データベース直接アクセス
java -jar scalardb-cluster-data-loader-<VERSION>-all.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.json \
--format JSON \
--import-mode UPDATE
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.json \
--format JSON \
--import-mode UPDATE
制御ファイルを使用したカスタムフィールドマッピングでのインポート
ソースファイルのフィールドがテーブルのカラム名と一致しない場合、制御ファイルを使用してカスタムマッピングルールを定義できます。制御ファイルの作成とマッピング設定の詳細については、カスタムデータマッピングを参照してください。
制御ファイルを使用してカスタムフィールドマッピングでインポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
- ScalarDB Cluster
- データベース直接アクセス
java -jar scalardb-cluster-data-loader-<VERSION>-all.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--file <FILE_PATH>.json \
--format JSON \
--control-file <CONTROL_FILE>.json
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--file <FILE_PATH>.json \
--format JSON \
--control-file <CONTROL_FILE>.json
カスタム区切り文字での CSV データのインポート
カスタム区切り文字で CSV データをインポートするには、以下のコマンドを実行し、角括弧内の内容を説明どおりに置き換えます:
- ScalarDB Cluster
- データベース直接アクセス
java -jar scalardb-cluster-data-loader-<VERSION>-all.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.csv \
--format CSV \
--delimiter ";"
java -jar scalardb-data-loader-<VERSION>.jar import \
--config scalardb.properties \
--mode TRANSACTION \
--namespace <NAMESPACE_NAME> \
--table <TABLE_NAME> \
--file <FILE_PATH>.csv \
--format CSV \
--delimiter ";"
インポートの設定
インポートプロセスをより詳細に制御するために、さまざまなオプションを設定できます: