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

TableStore 抽象化を使用して ScalarDL アプリケーションを書く

注記

このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。

このドキュメントでは、TableStore 抽象化を使用して ScalarDL アプリケーションを作成する方法について説明します。アプリケーションで ScalarDL TableStore を使用する方法、エラーを処理する方法、データを検証する方法について学習します。

ScalarDL TableStore Client SDK の使用

ScalarDL TableStore を使用するには、次の2つのオプションがあります:

コマンドの使用は、アプリケーションを作成せずに TableStore を試す便利な方法です。ただし、TableStore ベースのアプリケーションを構築する場合は、各操作で個別のプロセスを起動することなく、より効率的に動作する TableStore Client SDK が推奨されます。

TableStore Client SDK は Maven Central で利用できます。Gradle などのビルドツールを使用して、アプリケーションにインストールできます。たとえば、Gradle では、次の依存関係を build.gradle に追加できます。VERSION は使用したい ScalarDL のバージョンに置き換えてください。

dependencies {
implementation group: 'com.scalar-labs', name: 'scalardl-tablestore-java-client-sdk', version: '<VERSION>'
}

TableStore の Client SDK API は、TableStoreClientService というサービスクラスによって提供されます。以下は、TableStoreClientService を使用してテーブルの真正性を管理する方法を示すコードスニペットです。TableStoreClientService は、ScalarDL TableStore をはじめようで示された TableStore クライアントコマンドと同じ機能を提供します。

  // TableStoreClientServiceFactory は常に再利用する必要があります。
TableStoreClientServiceFactory factory = new TableStoreClientServiceFactory();

// TableStoreClientServiceFactory は create メソッドの呼び出しごとに新しい TableStoreClientService オブジェクトを作成しますが、
// パフォーマンスとリソース使用量を向上させるために、内部オブジェクトと接続をできるだけ再利用します。
TableStoreClientService service = factory.create(new ClientConfig(new File(properties)));
try {
// SQL ステートメントを実行します。
String sql = "SELECT * FROM employee WHERE id = '1001'";
ExecutionResult result = service.executeStatement(sql);
result.getResult().ifPresent(System.out::println);
} catch (ClientException e) {
System.err.println(e.getStatusCode());
System.err.println(e.getMessage());
}

factory.close();
注記

TableStoreClientService オブジェクトを作成するには、常に TableStoreClientServiceFactory を使用する必要があります。TableStoreClientServiceFactoryTableStoreClientService の作成に必要なオブジェクトをキャッシュし、指定された設定に基づいてそれらを再利用するため、TableStoreClientServiceFactory オブジェクトは常に再利用する必要があります。

TableStoreClientServiceFactoryTableStoreClientService の詳細については、scalardl-tablestore-java-client-sdk Javadoc を参照してください。

エラーの処理

アプリケーションでエラーが発生した場合、Client SDK はステータスコードとエラーコードを含むエラーメッセージを持つ例外を返します。エラーの原因を特定するには、ステータスコードとエラーコードを確認する必要があります。ステータスコードとエラーコードの詳細については、ステータスコードエラーコードを参照してください。

エラー処理の実装

エラーが発生すると、SDK は ClientException をスローします。次のように例外をキャッチしてエラーを処理できます:

TableStoreClientService service = ...;
try {
// TableStoreClientService オブジェクトを通じて ScalarDL TableStore とやり取りする
} catch (ClientException e) {
// e.getStatusCode() はエラーのステータスを返す
}

データの検証

ScalarDL では、すべてのデータが有効な状態であることを確認するために、データを検証する必要があることがあります。ScalarDL がデータを検証する方法の基本についてはJava で ScalarDL アプリケーションを書くで学習できるため、このセクションでは主に TableStore で検証を実行する方法について説明します。

TableStore で アセット (ここではレコード、インデックスレコード、テーブルスキーマ) を検証する場合、テーブルと、必要に応じてプライマリキーまたはインデックスキーを指定する必要があります。TableStore でアセットを検証するコード例は次のとおりです:

  TableStoreClientService service = ...
String tableName = "employee";
String primaryKeyColumn = "id";
String indexKeyColumn = "department";
TextNode primaryKeyValue = TextNode.valueOf("1001");
TextNode indexKeyValue = TextNode.valueOf("sales");
try {
LedgerValidationResult result1 =
service.validateRecord(tableName, primaryKeyColumn, primaryKeyValue);
LedgerValidationResult result2 =
service.validateIndexRecord(tableName, indexKeyColumn, indexKeyValue);
LedgerValidationResult result3 = service.validateTableSchema(tableName);
// 世代範囲を指定することもできます。
// LedgerValidationResult result1 =
// service.validateRecord(tableName, primaryKeyColumn, primaryKeyValue, startAge, endAge);
// LedgerValidationResult result2 =
// service.validateIndexRecord(tableName, indexKeyColumn, indexKeyValue, startAge, endAge);
// LedgerValidationResult result3 = service.validateTableSchema(tableName, startAge, endAge);
} catch (ClientException e) {
}
注記

TableStore は内部的に、レコード、インデックスレコード、テーブルスキーマを表すアセットに専用のアセット ID を割り当てます。アセット ID は、アセットタイプを示すプレフィックスとキーで構成されます。たとえば、レコードのアセット ID にはプレフィックス rec_、プライマリキー列名、プライマリキー値が使用されます。これらの生のアセット ID は、LedgerValidationResultAssetProof で確認できます。