

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Keyspaces でのクライアント側のタイムスタンプ
<a name="client-side-timestamps"></a>

Amazon Keyspaces では、クライアントサイドのタイムスタンプは Cassandra 互換のタイムスタンプです。テーブル内の各セルに保存されます。クライアントアプリケーションがクライアントサイドのタイムスタンプで書き込みの順序を決定できるようにして競合を解決します。たとえば、グローバルに分散しているアプリケーションのクライアントが同じデータを更新する場合、クライアントサイドのタイムスタンプにはクライアントサイドで更新が行われた順序が残ります。Amazon Keyspaces はこれらのタイムスタンプを使用して書き込みを処理します。

Amazon Keyspaces のクライアント側のタイムスタンプは全面的に管理されています。コンパクション戦略やクリーンアップ戦略などの低レベルのシステム設定は管理する必要はありません。

データを削除すると、行は削除対象としてトゥームストーンのマークが付きます。Amazon Keyspaces では、アプリケーションのパフォーマンスや可用性に影響を与えることなく、トゥームストーン化されたデータは (通常は 10 日以内に) 自動的に削除されます。トゥームストーン化されたデータは、データ操作言語 (DML) ステートメントでは使用できなくなります。トゥームストーン化されたデータがある行に対して引き続き読み取りと書き込みを実行すると、トゥームストーン化されたデータは、ストレージから削除されるまで、ストレージ、読み取りキャパシティユニット (RCU) および書き込みキャパシティユニット (WCU) にカウントされ続けます。

テーブルのクライアントサイドのタイムスタンプを有効にすると、データ操作言語 (DML) CQL クエリの `USING TIMESTAMP` 句でタイムスタンプを指定できます。詳細については、「[Amazon Keyspaces のクエリでクライアント側のタイムスタンプを使用する](client-side-timestamps-how-to-queries.md)」を参照してください。CQL クエリでタイムスタンプを指定しない場合、Amazon Keyspaces はクライアントドライバーによって渡されたタイムスタンプを使用します。クライアントドライバーでタイムスタンプが提供されない場合、タイムスタンプを `NULL` にすることはできないため、Amazon Keyspaces はセルごとにタイムスタンプを自動的に割り当てます。タイムスタンプをクエリするには、DML ステートメント内の `WRITETIME` 関数を使用できます。

Amazon Keyspaces では、クライアントサイドのタイムスタンプを有効にしても追加料金はかかりません。ただし、クライアントサイドのタイムスタンプでは、行内の値ごとに追加のデータを保存して書き込みます。これにより、ストレージの使用量が増え、場合によってはスループットの使用量が増える可能性があります。料金の詳細については、「[Amazon Keyspaces (Apache Cassandra 向け) の料金](https://aws.amazon.com/keyspaces/pricing)」を参照してください。

Amazon Keyspaces でクライアント側のタイムスタンプをオンにすると、すべての行のすべての列にタイムスタンプが格納されます。これらのタイムスタンプで約 20 ～ 40 バイト (データによって異なります) が使用され、行のストレージとスループットのコストに影響します。これらのメタデータバイトはまた、1 MB の行サイズクォータにカウントされます。(行のサイズが 1 MB 未満になるように) ストレージスペース全体の増加量を決定するときは、テーブルの列数と各行のコレクション要素の数を考慮してください。たとえば、テーブルに 20 列あり、各列に 40 バイトのデータが格納されている場合、行のサイズは 800 バイトから 1200 バイトに増加します。行のサイズを見積もる方法の詳細については、「[Amazon Keyspaces で行のサイズを推定する](calculating-row-size.md)」を参照してください。この例では、ストレージ用の余分な 400 バイトに加えて、1 回の書き込みで消費される書き込みキャパシティーユニット (WCU) の数が 1 WCU から 2 WCU に増えます。読み取りキャパシティと書き込みキャパシティの計算方法の詳細については、「[Amazon Keyspaces で読み取り/書き込みのキャパシティモードを設定する](ReadWriteCapacityMode.md)」を参照してください。

テーブルのクライアント側のタイムスタンプをオンにすると、オフにすることはできません。

クエリでクライアント側のタイムスタンプを使用する方法については、「[Amazon Keyspaces のクエリでクライアント側のタイムスタンプを使用する](client-side-timestamps-how-to-queries.md)」を参照してください。

**Topics**
+ [Amazon Keyspaces クライアント側のタイムスタンプと AWS サービスとの統合方法](#client-side-timestamps_integration)
+ [クライアント側のタイムスタンプが有効な新規テーブルを Amazon Keyspaces で作成する](client-side-timestamps-create-new-table.md)
+ [Amazon Keyspaces でテーブルに対してクライアント側のタイムスタンプを設定する](client-side-timestamps-existing-table.md)
+ [Amazon Keyspaces のクエリでクライアント側のタイムスタンプを使用する](client-side-timestamps-how-to-queries.md)

## Amazon Keyspaces クライアント側のタイムスタンプと AWS サービスとの統合方法
<a name="client-side-timestamps_integration"></a>

次のクライアント側のメトリクスは Amazon CloudWatch で継続的モニタリングを有効にするために使用できます。
+ `SystemReconciliationDeletes` — トゥームストーン化したデータを削除するために必要な削除操作の数。

CloudWatch のメトリクスのモニタリング方法については、「[Amazon CloudWatch による Amazon Keyspaces のモニタリング](monitoring-cloudwatch.md)」を参照してください。

を使用すると CloudFormation、Amazon Keyspaces テーブルの作成時にクライアント側のタイムスタンプを有効にできます。詳細については、「[AWS CloudFormation ユーザーガイド](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cassandra-table.html)」を参照してください。

# クライアント側のタイムスタンプが有効な新規テーブルを Amazon Keyspaces で作成する
<a name="client-side-timestamps-create-new-table"></a>

Amazon Keyspaces、Cassandra クエリ言語 (CQL) AWS マネジメントコンソール、または を使用して、クライアント側のタイムスタンプを有効にした新しい Amazon Keyspaces テーブルを作成するには、次の例に従います。 AWS Command Line Interface

------
#### [ Console ]

**クライアント側のタイムスタンプが有効な新規テーブルを作成する (コンソール)**

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/keyspaces/home](https://console.aws.amazon.com/keyspaces/home) で Amazon Keyspaces コンソールを開きます。

1. ナビゲーションペインで [**Tables]** (テーブル) を選択して、[**Create table (テーブルの作成)**] を選択します。

1. [**Table details (テーブルの詳細)**] セクションの [**Create table (テーブルの作成)**] ページで、キースペースを選択し、新しいテーブルに名前を付けます。

1. [**Schema (スキーマ)**] セクションで、テーブルのスキーマを作成します。

1. [**Table settings (テーブルの設定)**] セクションで、[**Customize settings (設定のカスタマイズ)**] を選択します。

1. [**クライアント側のタイムスタンプ**] に進みます。

   [**クライアント側のタイムスタンプを有効にする**] を選択して、テーブルのクライアント側のタイムスタンプを有効にします。

1. [**Create table (テーブルの作成)**] を選択します。テーブルはクライアント側のタイムスタンプが有効の状態で作成されます。

------
#### [ Cassandra Query Language (CQL) ]

**CQL を使用して新規テーブルを作成する**

1. クライアント側のタイムスタンプが有効な新規テーブルを CQL で作成するには、次の例を使用します。

   ```
   CREATE TABLE my_keyspace.my_table (
      userid uuid,
      time timeuuid,
      subject text,
      body text,
      user inet,
      PRIMARY KEY (userid, time)
   ) WITH CUSTOM_PROPERTIES = {'client_side_timestamps': {'status': 'enabled'}};
   ```

1. 新しいテーブルのクライアント側のタイムスタンプ設定を確認するには、次の例に示すように、`SELECT` ステートメントで、`custom_properties` を見直します。

   ```
   SELECT custom_properties from system_schema_mcs.tables where keyspace_name = 'my_keyspace' and table_name = 'my_table';
   ```

   このステートメントの出力には、クライアント側のタイムスタンプのステータスが表示されます。

   ```
   'client_side_timestamps': {'status': 'enabled'}
   ```

------
#### [ AWS CLI ]

**を使用して新しいテーブルを作成する AWS CLI**

1. クライアント側のタイムスタンプが有効な新規テーブルを作成するには、次の例を使用します。

   ```
   ./aws keyspaces create-table \
   --keyspace-name my_keyspace \
   --table-name my_table \
   --client-side-timestamps 'status=ENABLED' \
   --schema-definition 'allColumns=[{name=id,type=int},{name=date,type=timestamp},{name=name,type=text}],partitionKeys=[{name=id}]'
   ```

1. 新しいテーブルのクライアント側のタイムスタンプが有効になっていることを確認するには、次のコードを実行します。

   ```
   ./aws keyspaces get-table \
   --keyspace-name my_keyspace \
   --table-name my_table
   ```

   この例のような出力が得られます。

   ```
   {
       "keyspaceName": "my_keyspace",
       "tableName": "my_table",
       "resourceArn": "arn:aws:cassandra:us-east-1:111122223333:/keyspace/my_keyspace/table/my_table",
       "creationTimestamp": 1662681206.032,
       "status": "ACTIVE",
       "schemaDefinition": {
           "allColumns": [
               {
                   "name": "id",
                   "type": "int"
               },
               {
                   "name": "date",
                   "type": "timestamp"
               },
               {
                   "name": "name",
                   "type": "text"
               }
           ],
           "partitionKeys": [
               {
                   "name": "id"
               }
           ],
           "clusteringKeys": [],
           "staticColumns": []
       },
       "capacitySpecification": {
           "throughputMode": "PAY_PER_REQUEST",
           "lastUpdateToPayPerRequestTimestamp": 1662681206.032
       },
       "encryptionSpecification": {
           "type": "AWS_OWNED_KMS_KEY"
       },
       "pointInTimeRecovery": {
           "status": "DISABLED"
       },
       "clientSideTimestamps": {
           "status": "ENABLED"
       },
       "ttl": {
           "status": "ENABLED"
       },
       "defaultTimeToLive": 0,
       "comment": {
           "message": ""
       }
   }
   ```

------

# Amazon Keyspaces でテーブルに対してクライアント側のタイムスタンプを設定する
<a name="client-side-timestamps-existing-table"></a>

Amazon Keyspaces、Cassandra クエリ言語 (CQL) AWS マネジメントコンソール、または を使用して、既存のテーブルのクライアント側のタイムスタンプを有効にするには、次の例に従います AWS Command Line Interface。

------
#### [ Console ]

**既存のテーブル (コンソール) のクライアント側のタイムスタンプを有効にするには**

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/keyspaces/home](https://console.aws.amazon.com/keyspaces/home) で Amazon Keyspaces コンソールを開きます。

1. 更新するテーブルを選択し、次に [**Additional settings (追加設定)**] タブを選択します。

1. [**追加設定**] タブの [**クライアント側のタイムスタンプを変更**] に移動し、[**クライアント側のタイムスタンプを有効にする**] を選択します。

1. [**変更を保存**] を選択してテーブルの設定を変更します。

------
#### [ Cassandra Query Language (CQL) ]

**CQL ステートメントを使用する**

1. CQL の `ALTER TABLE` ステートメントを使用して、既存のテーブルに対してクライアント側のタイムスタンプを有効にします。

   ```
   ALTER TABLE my_table WITH custom_properties = {'client_side_timestamps': {'status': 'enabled'}};;
   ```

1. 新しいテーブルのクライアント側のタイムスタンプ設定を確認するには、次の例に示すように、`SELECT` ステートメントで、`custom_properties` を見直します。

   ```
   SELECT custom_properties from system_schema_mcs.tables where keyspace_name = 'my_keyspace' and table_name = 'my_table';
   ```

   このステートメントの出力には、クライアント側のタイムスタンプのステータスが表示されます。

   ```
   'client_side_timestamps': {'status': 'enabled'}
   ```

------
#### [ AWS CLI ]

**の使用 AWS CLI**

1. 次の例 AWS CLI を使用して、 を使用して既存のテーブルのクライアント側のタイムスタンプを有効にできます。

   ```
   ./aws keyspaces update-table \
   --keyspace-name my_keyspace \
   --table-name my_table \
   --client-side-timestamps 'status=ENABLED'
   ```

1. テーブルのクライアント側のタイムスタンプが有効になっていることを確認するには、次のコードを実行します。

   ```
   ./aws keyspaces get-table \
   --keyspace-name my_keyspace \
   --table-name my_table
   ```

   この例のような出力が表示され、クライアント側のタイムスタンプのステータスが `ENABLED` となっているはずです。

   ```
   {
       "keyspaceName": "my_keyspace",
       "tableName": "my_table",
       "resourceArn": "arn:aws:cassandra:us-east-1:111122223333:/keyspace/my_keyspace/table/my_table",
       "creationTimestamp": 1662681312.906,
       "status": "ACTIVE",
       "schemaDefinition": {
           "allColumns": [
               {
                   "name": "id",
                   "type": "int"
               },
               {
                   "name": "date",
                   "type": "timestamp"
               },
               {
                   "name": "name",
                   "type": "text"
               }
           ],
           "partitionKeys": [
               {
                   "name": "id"
               }
           ],
           "clusteringKeys": [],
           "staticColumns": []
       },
       "capacitySpecification": {
           "throughputMode": "PAY_PER_REQUEST",
           "lastUpdateToPayPerRequestTimestamp": 1662681312.906
       },
       "encryptionSpecification": {
           "type": "AWS_OWNED_KMS_KEY"
       },
       "pointInTimeRecovery": {
           "status": "DISABLED"
       },
       "clientSideTimestamps": {
           "status": "ENABLED"
       },
       "ttl": {
           "status": "ENABLED"
       },
       "defaultTimeToLive": 0,
       "comment": {
           "message": ""
       }
   }
   ```

------

# Amazon Keyspaces のクエリでクライアント側のタイムスタンプを使用する
<a name="client-side-timestamps-how-to-queries"></a>

クライアント側のタイムスタンプを有効にすると、`USING TIMESTAMP` 節の `INSERT`、`UPDATE`、および `DELETE` ステートメントにそのタイムスタンプを句とともに渡すことができます。

タイムスタンプ値は、epoch という標準基準時刻 1970 年 1 月 1 日 00:00:00 GMT からのマイクロ秒数をを表す`bigint` です。クライアントから提供されるタイムスタンプは、現在のウォールクロックタイムから過去 2 日間と未来の 5分間の範囲とします。

Amazon Keyspaces は、データの存続期間中、タイムスタンプのメタデータを保持します。`WRITETIME` 関数で、数年前に発生したタイムスタンプを検索できます。構文の詳細については、「[Amazon Keyspaces の DML ステートメント (データ操作言語)](cql.dml.md)」を参照してください。

次の CQL ステートメントは、タイムスタンプを `update_parameter` として使用する方法の例です。

```
INSERT INTO catalog.book_awards (year, award, rank, category, book_title, author, publisher)
   VALUES (2022, 'Wolf', 4, 'Non-Fiction', 'Science Update', 'Ana Carolina Silva', 'SomePublisher') 
   USING TIMESTAMP 1669069624;
```

CQL クエリでタイムスタンプを指定しない場合、Amazon Keyspaces はクライアントドライバーから渡されたタイムスタンプを使用します。クライアントドライバーからタイムスタンプが提供されない場合、Amazon Keyspaces は書き込み操作にサーバー側のタイムスタンプを割り当てます。

特定の列に保存されているタイムスタンプ値を確認するには、次の例のように `WRITETIME` 関数を `SELECT` ステートメントで使用できます。

```
SELECT year, award, rank, category, book_title, author, publisher, WRITETIME(year), WRITETIME(award), WRITETIME(rank),
  WRITETIME(category), WRITETIME(book_title), WRITETIME(author), WRITETIME(publisher) from catalog.book_awards;
```