|
| 1 | +--- |
| 2 | +tags: |
| 3 | + - Community |
| 4 | + - Enterprise |
| 5 | +displayed_sidebar: docsJapanese |
| 6 | +--- |
| 7 | + |
| 8 | +# TableStore 抽象化を使用して ScalarDL アプリケーションを書く |
| 9 | + |
| 10 | +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; |
| 11 | + |
| 12 | +<TranslationBanner /> |
| 13 | + |
| 14 | +import JavadocLink from "/src/theme/JavadocLink.js"; |
| 15 | + |
| 16 | +このドキュメントでは、TableStore 抽象化を使用して ScalarDL アプリケーションを作成する方法について説明します。アプリケーションで ScalarDL TableStore を使用する方法、エラーを処理する方法、データを検証する方法について学習します。 |
| 17 | + |
| 18 | +## ScalarDL TableStore Client SDK の使用 |
| 19 | + |
| 20 | +ScalarDL TableStore を使用するには、次の2つのオプションがあります: |
| 21 | + |
| 22 | +- [ScalarDL TableStore をはじめよう](getting-started-tablestore.mdx)で示されているように[コマンド](scalardl-tablestore-command-reference.mdx)を使用する |
| 23 | +- [TableStore Java Client SDK](https://javadoc.io/doc/com.scalar-labs/scalardl-tablestore-java-client-sdk/) を使用する |
| 24 | + |
| 25 | +コマンドの使用は、アプリケーションを作成せずに TableStore を試す便利な方法です。ただし、TableStore ベースのアプリケーションを構築する場合は、各操作で個別のプロセスを起動することなく、より効率的に動作する TableStore Client SDK が推奨されます。 |
| 26 | + |
| 27 | +TableStore Client SDK は [Maven Central](https://central.sonatype.com/artifact/com.scalar-labs/scalardl-tablestore-java-client-sdk) で利用できます。Gradle などのビルドツールを使用して、アプリケーションにインストールできます。たとえば、Gradle では、次の依存関係を `build.gradle` に追加できます。`VERSION` は使用したい ScalarDL のバージョンに置き換えてください。 |
| 28 | + |
| 29 | +```gradle |
| 30 | +dependencies { |
| 31 | + implementation group: 'com.scalar-labs', name: 'scalardl-tablestore-java-client-sdk', version: '<VERSION>' |
| 32 | +} |
| 33 | +``` |
| 34 | + |
| 35 | +TableStore の Client SDK API は、<JavadocLink packageName="scalardl-tablestore-java-client-sdk" path="com/scalar/dl/tablestore/client/service" className="TableStoreClientService" /> というサービスクラスによって提供されます。以下は、`TableStoreClientService` を使用してテーブルの真正性を管理する方法を示すコードスニペットです。`TableStoreClientService` は、[ScalarDL TableStore をはじめよう](getting-started-tablestore.mdx)で示された TableStore クライアントコマンドと同じ機能を提供します。 |
| 36 | + |
| 37 | +```java |
| 38 | + // TableStoreClientServiceFactory は常に再利用する必要があります。 |
| 39 | + TableStoreClientServiceFactory factory = new TableStoreClientServiceFactory(); |
| 40 | + |
| 41 | + // TableStoreClientServiceFactory は create メソッドの呼び出しごとに新しい TableStoreClientService オブジェクトを作成しますが、 |
| 42 | + // パフォーマンスとリソース使用量を向上させるために、内部オブジェクトと接続をできるだけ再利用します。 |
| 43 | + TableStoreClientService service = factory.create(new ClientConfig(new File(properties))); |
| 44 | + try { |
| 45 | + // SQL ステートメントを実行します。 |
| 46 | + String sql = "SELECT * FROM employee WHERE id = '1001'"; |
| 47 | + ExecutionResult result = service.executeStatement(sql); |
| 48 | + result.getResult().ifPresent(System.out::println); |
| 49 | + } catch (ClientException e) { |
| 50 | + System.err.println(e.getStatusCode()); |
| 51 | + System.err.println(e.getMessage()); |
| 52 | + } |
| 53 | + |
| 54 | + factory.close(); |
| 55 | +``` |
| 56 | + |
| 57 | +:::note |
| 58 | + |
| 59 | +`TableStoreClientService` オブジェクトを作成するには、常に `TableStoreClientServiceFactory` を使用する必要があります。`TableStoreClientServiceFactory` は `TableStoreClientService` の作成に必要なオブジェクトをキャッシュし、指定された設定に基づいてそれらを再利用するため、`TableStoreClientServiceFactory` オブジェクトは常に再利用する必要があります。 |
| 60 | + |
| 61 | +::: |
| 62 | + |
| 63 | +`TableStoreClientServiceFactory` と `TableStoreClientService` の詳細については、[`scalardl-tablestore-java-client-sdk` Javadoc](https://javadoc.io/doc/com.scalar-labs/scalardl-tablestore-java-client-sdk/latest/index.html) を参照してください。 |
| 64 | + |
| 65 | +## エラーの処理 |
| 66 | + |
| 67 | +アプリケーションでエラーが発生した場合、Client SDK はステータスコードとエラーコードを含むエラーメッセージを持つ例外を返します。エラーの原因を特定するには、ステータスコードとエラーコードを確認する必要があります。ステータスコードとエラーコードの詳細については、[ステータスコード](how-to-write-applications.mdx#ステータスコード)と[エラーコード](how-to-write-applications.mdx#エラーコード)を参照してください。 |
| 68 | + |
| 69 | +### エラー処理の実装 |
| 70 | + |
| 71 | +エラーが発生すると、SDK は <JavadocLink packageName="scalardl-java-client-sdk" path="com/scalar/dl/client/exception" className="ClientException" /> をスローします。次のように例外をキャッチしてエラーを処理できます: |
| 72 | + |
| 73 | +```java |
| 74 | +TableStoreClientService service = ...; |
| 75 | +try { |
| 76 | + // TableStoreClientService オブジェクトを通じて ScalarDL TableStore とやり取りする |
| 77 | +} catch (ClientException e) { |
| 78 | + // e.getStatusCode() はエラーのステータスを返す |
| 79 | +} |
| 80 | +``` |
| 81 | + |
| 82 | +## データの検証 |
| 83 | + |
| 84 | +ScalarDL では、すべてのデータが有効な状態であることを確認するために、データを検証する必要があることがあります。ScalarDL がデータを検証する方法の基本については[Java で ScalarDL アプリケーションを書く](how-to-write-applications.mdx#データを検証する)で学習できるため、このセクションでは主に TableStore で検証を実行する方法について説明します。 |
| 85 | + |
| 86 | +TableStore で [アセット](data-modeling.mdx#アセット) (ここではレコード、インデックスレコード、テーブルスキーマ) を検証する場合、テーブルと、必要に応じてプライマリキーまたはインデックスキーを指定する必要があります。TableStore でアセットを検証するコード例は次のとおりです: |
| 87 | + |
| 88 | +```java |
| 89 | + TableStoreClientService service = ... |
| 90 | + String tableName = "employee"; |
| 91 | + String primaryKeyColumn = "id"; |
| 92 | + String indexKeyColumn = "department"; |
| 93 | + TextNode primaryKeyValue = TextNode.valueOf("1001"); |
| 94 | + TextNode indexKeyValue = TextNode.valueOf("sales"); |
| 95 | + try { |
| 96 | + LedgerValidationResult result1 = |
| 97 | + service.validateRecord(tableName, primaryKeyColumn, primaryKeyValue); |
| 98 | + LedgerValidationResult result2 = |
| 99 | + service.validateIndexRecord(tableName, indexKeyColumn, indexKeyValue); |
| 100 | + LedgerValidationResult result3 = service.validateTableSchema(tableName); |
| 101 | + // 世代範囲を指定することもできます。 |
| 102 | + // LedgerValidationResult result1 = |
| 103 | + // service.validateRecord(tableName, primaryKeyColumn, primaryKeyValue, startAge, endAge); |
| 104 | + // LedgerValidationResult result2 = |
| 105 | + // service.validateIndexRecord(tableName, indexKeyColumn, indexKeyValue, startAge, endAge); |
| 106 | + // LedgerValidationResult result3 = service.validateTableSchema(tableName, startAge, endAge); |
| 107 | + } catch (ClientException e) { |
| 108 | + } |
| 109 | +``` |
| 110 | + |
| 111 | +:::note |
| 112 | + |
| 113 | +TableStore は内部的に、レコード、インデックスレコード、テーブルスキーマを表すアセットに専用のアセット ID を割り当てます。アセット ID は、アセットタイプを示すプレフィックスとキーで構成されます。たとえば、レコードのアセット ID にはプレフィックス `rec_`、プライマリキー列名、プライマリキー値が使用されます。これらの生のアセット ID は、`LedgerValidationResult` の `AssetProof` で確認できます。 |
| 114 | + |
| 115 | +::: |
0 commit comments