

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

# Amazon Keyspaces (Apache Cassandra 向け) の CQL 言語リファレンス
<a name="cql"></a>

Amazon Keyspaces エンドポイントに接続した後は、Cassandra クエリ言語 (CQL) を使用してデータベースを操作します。CQL は多くの点で構造化クエリ言語 (SQL) に似ています。
+ **CQL 要素** – Amazon Keyspaces でサポートされている CQL の基本要素 (識別子、定数、用語、データ型など) を取り上げます。文字列型、数値型、コレクション型などの概念について説明します。
+ **データ定義言語 (DDL)** – DDL ステートメントは、Amazon Keyspaces のキースペースやテーブルなどのデータ構造を管理するために使用されます。このセクションでは、キースペースとテーブルを作成、変更、削除するステートメントや、ポイントインタイムバックアップからテーブルを復元するステートメントを取り上げます。
+ **データ操作言語 (DML) ** – DML ステートメントは、テーブル内のデータを管理するために使用されます。このセクションでは、データの選択、挿入、更新、削除に関するステートメントを取り上げます。また、`IN` 演算子の使用、結果の順序付け、ページ分割など、高度なクエリ機能についても説明します。
+ **組み込み関数** – Amazon Keyspaces は、さまざまな組み込みスカラー関数をサポートしています。これらの関数を CQL ステートメントで使用できます。このセクションでは、これらの関数について、使用例を含め、概要を紹介します。

このトピックを通じて、Amazon Keyspaces で CQL を効果的に使用するための具体的な構文、例、ベストプラクティスを紹介します。

**Topics**
+ [Amazon Keyspaces における Cassandra クエリ言語 (CQL) 要素](cql.elements.md)
+ [Amazon Keyspaces の DDL ステートメント (データ定義言語)](cql.ddl.md)
+ [Amazon Keyspaces の DML ステートメント (データ操作言語)](cql.dml.md)
+ [Amazon Keyspaces の組み込み関数](cql.functions.md)

# Amazon Keyspaces における Cassandra クエリ言語 (CQL) 要素
<a name="cql.elements"></a>

識別子、定数、用語、データ型など、Amazon Keyspaces でサポートされている Cassandra クエリ言語 (CQL) 要素について説明します。

**Topics**
+ [identifier](#cql.elements.identifier)
+ [constants](#cql.elements.constants)
+ [term](#cql.elements.term)
+ [データ型](#cql.data-types)
+ [Amazon Keyspaces データ型の JSON エンコード](#cql.data-types.JSON)

## 識別子
<a name="cql.elements.identifier"></a>

識別子 (または名前) は、テーブル、列、およびその他のオブジェクトの識別に使用されます。識別子は、引用符で囲んだものも、囲んでいないものも有効です。以下が適用されます。

```
identifier          ::=  unquoted_identifier | quoted_identifier
unquoted_identifier ::=  re('[a-zA-Z][a-zA-Z0-9_]*')
quoted_identifier   ::=  '"' (any character where " can appear if doubled)+ '"'
```

## 定数
<a name="cql.elements.constants"></a>

以下の定数が定義されます。

```
constant ::=  string | integer | float | boolean | uuid | blob | NULL
string   ::=  '\'' (any character where ' can appear if doubled)+ '\''
              '$$' (any character other than '$$') '$$'
integer  ::=  re('-?[0-9]+')
float    ::=  re('-?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9+])?') | NAN | INFINITY
boolean  ::=  TRUE | FALSE
uuid     ::=  hex{8}-hex{4}-hex{4}-hex{4}-hex{12}
hex      ::=  re("[0-9a-fA-F]")
blob     ::=  '0' ('x' | 'X') hex+
```

## 用語
<a name="cql.elements.term"></a>

用語は、サポートされている値の種類を表します。用語は以下により定義されます。

```
term                 ::=  constant | literal | function_call | arithmetic_operation | type_hint | bind_marker
literal              ::=  collection_literal | tuple_literal
function_call        ::=  identifier '(' [ term (',' term)* ] ')'
arithmetic_operation ::=  '-' term | term ('+' | '-' | '*' | '/' | '%') term
```

## データ型
<a name="cql.data-types"></a>

Amazon Keyspaces では、次のデータ型がサポートされています。

### 文字列型
<a name="cql.data-types.string"></a>


****  

| データ型 | 説明 | 
| --- | --- | 
|  `ascii`  | ASCII 文字列を表します。 | 
|  `text`  | UTF-8 でエンコードされた文字列を表します。 | 
|  `varchar`  |  UTF-8 でエンコードされた文字列を表します (`varchar` は `text` のエイリアス)。  | 

### 数値型
<a name="cql.data-types.numeric"></a>


****  

| データ型 | 説明 | 
| --- | --- | 
|  `bigint`  | 64 ビットの符号付き長整数を表します。 | 
|  `counter`  | 64 ビットの符号付き整数カウンタを表します。詳細については、「[カウンタ](#cql.data-types.numeric.counters)」を参照してください。 | 
|  `decimal`  | 可変精度の 10 進数を表します。 | 
|  `double`  | 64 ビット の IEEE 754 浮動小数点を表します。 | 
|  `float`  | 32 ビット の IEEE 754 浮動小数点を表します。 | 
|  `int`  |  32 ビットの符号付き整数を表します。  | 
|  `varint`  |  \$1/-10^38 範囲内の整数値を表します。  | 

#### カウンタ
<a name="cql.data-types.numeric.counters"></a>

`counter` 列に 64 ビットの符号付き整数が含まれます。カウンタ値は、[UPDATE](cql.dml.update.md) ステートメントを用いて増加または減少されます。直接設定することはできません。これにより、カウントの追跡に役立つ `counter` 列が作成されます。例えば、カウンタを使用して、ログファイル内のエントリ数や、ソーシャルネットワークで投稿が閲覧された回数を追跡することができます。`counter` 列には以下の制限があります。
+ `counter` 型の列をテーブルの `primary key` の一部にすることはできません。
+ `counter` 型の列が 1 つ以上含まれているテーブルでは、そのテーブルのすべての列は `counter` 型の列でなければなりません。

カウンタの更新が失敗した場合 (タイムアウトや Amazon Keyspaces との接続の喪失など)、カウンタ値の更新の有無がクライアントに認識されません。更新が再試行された場合、カウンタ値への更新が 2 回目に適用されることがあります。

### BLOB 型
<a name="cql.data-types.blob"></a>


****  

| データ型 | 説明 | 
| --- | --- | 
|  `blob`  | 任意のバイトを表します。 | 

### ブール型
<a name="cql.data-types.boolean"></a>


****  

| データ型 | 説明 | 
| --- | --- | 
|  `boolean`  | true または false を表します。 | 

### 時間関連の型
<a name="cql.data-types.time"></a>


****  

| データ型 | 説明 | 
| --- | --- | 
|  `date`  | 形式の文字列<yyyy>-<mm>-<dd>。 | 
|  `timestamp`  | エポック (1970 年 1 月 1 日 00:00:00 GMT) からの日付と時刻をミリ秒単位で表す 64 ビットの符号付き整数。 | 
|  `timeuuid`  | [バージョン 1 UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)) を表します。 | 

### コレクション型
<a name="cql.data-types.collection"></a>


****  

| データ型 | 説明 | 
| --- | --- | 
|  `list`  | 順序が設定された一連のリテラル要素を表します。 | 
|  `map`  | 順序が設定されていない一連のキーバリューペアを表します。 | 
|  `set`  | 順序を設定した一連のリテラル要素 (1 つ以上) を表します。 | 

コレクション型でコレクション列を宣言し、その後に山括弧で囲んだ別のデータ型 (たとえば、`TEXT` または `INT`) を使用します。次の例のように`TEXT` の `SET` で列を作成することも、`TEXT` および `INT` のキーと値のペアの `MAP` を作成することもできます。

```
SET <TEXT>
MAP <TEXT, INT>
```

*非フリーズ*コレクションでは、個々のコレクション要素を更新できます。クライアント側のタイムスタンプと有効期限 (TTL) 設定は、個々の要素ごとに保存されます。

`FROZEN` コレクション型にキーワードを使用すると、コレクションの値は 1 つの不変の値にシリアル化され、Amazon Keyspaces ではそれらを `BLOB` のように扱われます。これは*フリーズ*コレクションです。`INSERT` または `UPDATE` ステートメントはフリーズされたコレクション全体を上書きします。フリーズコレクション内の個々の要素は更新できません。

クライアント側のタイムスタンプと有効期限 (TTL) の設定は、個々の要素ではなく、フリーズされたコレクション全体に適用されます。`Frozen` コレクション列は `PRIMARY KEY` のテーブルの一部にすることができます。

フリーズコレクションはネストできます。たとえば、次の例のように、`MAP` が `FROZEN` キーワードを使用している場合、`SET` 内の `MAP` を定義できます。

```
SET <FROZEN> <MAP <TEXT, INT>>>
```

Amazon Keyspaces では、デフォルトで最大 8 レベルのフリーズコレクションをネストできます。詳細については、「[Amazon Keyspaces サービスクォータ](quotas.md#table)」を参照してください。Apache Cassandra との機能の違いの詳細については、「[`FROZEN` collections](functional-differences.md#functional-differences.frozen-collections)」を参照してください。CQL 構文の詳細については、「[CREATE TABLE](cql.ddl.table.md#cql.ddl.table.create)」と「[ALTER TABLE](cql.ddl.table.md#cql.ddl.table.alter)」を参照してください。

### タプル型
<a name="cql.data-types.tuple"></a>

`tuple` データ型は、リテラル要素の有境グループを表します。`user defined type` の代わりにタプルを使用できます。タプルには `FROZEN` キーワードを使用する必要はありません。これは、タプルは常にフリーズされており、要素を個別に更新することはできないからです。

### その他の型
<a name="cql.data-types.other"></a>


****  

| データ型 | 説明 | 
| --- | --- | 
|  `inet`  | IPv4 形式または IPv6 形式の IP アドレスを表す文字列。 | 

### 静的
<a name="cql.data-types.static"></a>

クラスタリング列を含む Amazon Keyspaces テーブルでは、`STATIC` キーワードを使用して、任意の型の静的列を作成できます。

以下のステートメントは、この例です。

```
my_column INT STATIC
```

静的列の操作の詳細については、「[Amazon Keyspaces の静的列のキャパシティ消費量を推定する](static-columns.md)」を参照してください。

### ユーザー定義タイプ (UDTs)
<a name="cql.data-types.user-defined"></a>

Amazon Keyspaces はユーザー定義タイプ (UDTsをサポートしています。コレクションやその他の既存の UDT など、任意の有効な Amazon Keyspaces データ型を使用して UDTsを作成できます。キースペースに UDTs を作成し、それを使用してキースペース内の任意のテーブルの列を定義できます。

構文の詳細については、「[ユーザー定義タイプ (UDTs)](cql.ddl.type.md)」を参照してください。UDTs「」を参照してください[Amazon Keyspaces でのユーザー定義型 (UDT)](udts.md)。

キースペースごとにサポートされている UDTs の数、サポートされているネストレベル、および UDTs「」を参照してください[Amazon Keyspaces のユーザー定義タイプ (UDTsクォータとデフォルト値](quotas.md#quotas-udts)。

## Amazon Keyspaces データ型の JSON エンコード
<a name="cql.data-types.JSON"></a>

Amazon Keyspaces の JSON データ型マッピングは Apache Cassandra のものと同じです。次の表では、`INSERT JSON` ステートメントで Amazon Keyspaces に許容されるデータ型と、Amazon Keyspaces により `SELECT JSON` ステートメントともにデータが返される場合に使用されるデータ型について説明します。

`float`、`int`、`UUID`、`date` などの単一フィールドデータ型の場合は、データを `string` として挿入することもできます。`tuple`、`map`、`list` などの複合的なデータ型とデータ収集については、JSON またはエンコードされた `JSON string` としてデータを挿入することもできます。


****  

| JSON データ型 | `INSERT JSON` ステートメントで許容されたデータ型 | `SELECT JSON` ステートメントで返却されたデータ型 | 注意事項 | 
| --- | --- | --- | --- | 
|  `ascii`  | string | string | JSON 文字エスケープ `\u` を使用します。 | 
|  `bigint`  | integer, string | integer | 文字列は有効な 64 ビット整数でなければなりません。 | 
|  `blob`  | string | string | 文字列の最初は `0x` で、すぐ後に偶数の 16 進数が続きます。 | 
|  `boolean`  | boolean, string | boolean | 文字列は `true` または `false` のいずれかでなければなりません。 | 
|  `date`  | string | string | `YYYY-MM-DD` 形式、タイムゾーン UTC の日付。 | 
|  `decimal`  | integer, float, string | float | クライアント側のデコーダーで、32 ビットまたは 64 ビットの IEEE-754 浮動小数点精度を超えることがあります。 | 
|  `double`  | integer, float, string | float | 文字列は有効な整数または浮動小数点でなければなりません。 | 
|  `float`  | integer, float, string | float | 文字列は有効な整数または浮動小数点でなければなりません。 | 
|  `inet`  | string | string | IPv4 または IPv6 アドレス。 | 
|  `int`  | integer, string | integer | 文字列は有効な 32 ビット整数でなければなりません。 | 
|  `list`  | list, string | list | ネイティブ JSON リスト表現を使用します。 | 
|  `map`  | map, string | map | ネイティブ JSON マップ表現を使用します。 | 
|  `smallint`  | integer, string | integer | 文字列は有効な 16 ビット整数でなければなりません。 | 
|  `set`  | list, string | list | ネイティブ JSON リスト表現を使用します。 | 
|  `text`  | string | string | JSON 文字エスケープ `\u` を使用します。 | 
|  `time`  | string | string | `HH-MM-SS[.fffffffff]` 形式の時刻。 | 
|  `timestamp`  | integer, string | string | タイムスタンプ。文字列定数を使用するとタイムスタンプを日付として保存できます。`YYYY-MM-DD HH:MM:SS.SSS` 形式の日付スタンプが返されます。 | 
|  `timeuuid`  | string | string | 1 UUID 型。UUID 形式については「[constants](#cql.elements.constants)」を参照してください。 | 
|  `tinyint`  | integer, string | integer | 文字列は有効な 8 ビット整数でなければなりません。 | 
|  `tuple`  | list, string | list | ネイティブ JSON リスト表現を使用します。 | 
|  `UDT`  | map, string | map | フィールド名をキーとするネイティブ JSON マップ表現を使用します。 | 
|  `uuid`  | string | string | UUID 形式については「[constants](#cql.elements.constants)」を参照してください。 | 
|  `varchar`  | string | string | JSON 文字エスケープ `\u` を使用します。 | 
|  `varint`  | integer, string | integer | 可変長。クライアント側のデコーダーで 32 ビットまたは 64 ビットの整数をオーバーフローする可能性があります。 | 

# Amazon Keyspaces の DDL ステートメント (データ定義言語)
<a name="cql.ddl"></a>

*データ定義言語* (DDL) は、キー空間やテーブルなどの Amazon Keyspaces (Apache Cassandra 向け) のデータ構造を管理するために使用する一連の Cassandra クエリ言語 (CQL) ステートメントです。DDL を使用して、これらのデータ構造の作成、作成後の変更、および、使用しなくなったときの削除を行います。Amazon Keyspaces では DDL オペレーションが非同期的に実行されます。非同期操作が完了したことを確認する方法の詳細については、「[キースペースとテーブルの非同期的な作成および削除](functional-differences.md#functional-differences.table-keyspace-management)」を参照してください。

 次の DDL ステートメントがサポートされています。
+  [CREATE KEYSPACE](cql.ddl.keyspace.md#cql.ddl.keyspace.create) 
+  [ALTER KEYSPACE](cql.ddl.keyspace.md#cql.ddl.keyspace.alter) 
+  [DROP KEYSPACE](cql.ddl.keyspace.md#cql.ddl.keyspace.drop) 
+  [使用](cql.ddl.keyspace.md#cql.ddl.keyspace.use) 
+  [CREATE TABLE](cql.ddl.table.md#cql.ddl.table.create) 
+  [ALTER TABLE](cql.ddl.table.md#cql.ddl.table.alter) 
+  [RESTORE TABLE](cql.ddl.table.md#cql.ddl.table.restore) 
+  [DROP TABLE](cql.ddl.table.md#cql.ddl.table.drop) 
+  [タイプの作成](cql.ddl.type.md#cql.ddl.type.create) 
+  [ドロップタイプ](cql.ddl.type.md#cql.ddl.type.drop) 

**Topics**
+ [Keyspaces](cql.ddl.keyspace.md)
+ [テーブル](cql.ddl.table.md)
+ [ユーザー定義タイプ (UDTs)](cql.ddl.type.md)

# Keyspaces
<a name="cql.ddl.keyspace"></a>

*キー空間*は、1 つ以上のアプリケーションに関係している関連テーブルをグループ化するものです。リレーショナルデータベース管理システム (RDBMS) に関しては、キー空間が、データベース、テーブルスペース、または類似の構造とほぼ同じです。

**注記**  
Apache Cassandra では、キー空間により、複数のストレージノードにおけるデータのレプリケーション方法が決まります。ただし、Amazon Keyspaces はフルマネージドサービスであり、ストレージレイヤーの詳細情報がユーザーに代わって管理されます。このため、Amazon Keyspaces の Keyspaces は論理構造のみであり、基礎となる物理ストレージとは関係ありません。

Amazon Keyspaces キー空間のクォータ制限と制約については、「[Amazon Keyspaces (Apache Cassandra 向け) のクォータ](quotas.md)」を参照してください。

**Topics**
+ [CREATE KEYSPACE　](#cql.ddl.keyspace.create)
+ [ALTER KEYSPACE](#cql.ddl.keyspace.alter)
+ [DROP KEYSPACE](#cql.ddl.keyspace.drop)
+ [使用](#cql.ddl.keyspace.use)

## CREATE KEYSPACE　
<a name="cql.ddl.keyspace.create"></a>

`CREATE KEYSPACE` ステートメントを使用して、新しいキー空間を作成します。

[**Syntax (構文)**]

```
create_keyspace_statement ::= 
    CREATE KEYSPACE [ IF NOT EXISTS ] keyspace_name
    WITH options
```

Where:
+ `keyspace_name` は作成するキー空間の名前です。
+ *options* は以下のうちの 1 つ以上です。
  + `REPLICATION` — キー空間のレプリケーション戦略を示すマップ。
    + `SingleRegionStrategy` — 単一リージョンのキー空間用。(必須)
    + `NetworkTopologyStrategy` – 少なくとも 2 つ指定します AWS リージョン。各リージョンのレプリケーション係数は 3 です。(オプション)
  + `DURABLE_WRITES` — Amazon Keyspaces への書き込みは常に耐久性があるため、このオプションは必要ありません。ただし、指定する場合は、値は `true` でなければなりません。
  + `TAGS` – 作成時にリソースにアタッチされるキー値のペアタグのリスト。(オプション)

**例**

次のようなキー空間を作成します。

```
CREATE KEYSPACE my_keyspace
    WITH REPLICATION = {'class': 'SingleRegionStrategy'} and TAGS ={'key1':'val1', 'key2':'val2'} ;
```

マルチリージョンキースペースを作成するには、 を指定`NetworkTopologyStrategy`し、少なくとも 2 つ含めます AWS リージョン。各リージョンのレプリケーション係数は 3 です。

```
CREATE KEYSPACE my_keyspace
    WITH REPLICATION = {'class':'NetworkTopologyStrategy', 'us-east-1':'3', 'ap-southeast-1':'3','eu-west-1':'3'};
```

## ALTER KEYSPACE
<a name="cql.ddl.keyspace.alter"></a>

`ALTER KEYSPACE WITH` ステートメントは、次の*オプション*に使用できます。
+ `REPLICATION` – このオプションを使用して、キースペースに新しい AWS リージョン レプリカを追加します。新しいリージョンを単一リージョンまたはマルチリージョンのキースペースに追加できます。
+ `TAGS` – このオプションを使用して、キースペースからタグを追加または削除します。

**[Syntax]** (構文)

```
alter_keyspace_statement ::= 
    ALTER KEYSPACE keyspace_name
    WITH options
```

Where:
+ `keyspace_name` は変更するキー空間の名前です。
+ *オプション*は次のいずれかです。
  + `ADD | DROP TAGS` — キー空間で追加または削除されるキーバリューペアタグのリスト。
  + `REPLICATION` – キースペースのレプリケーション戦略を示すマップ。
    + `class`– キースペースをマルチリージョンキースペースとして`NetworkTopologyStrategy`定義します。
    + `region`– このキースペース AWS リージョン に追加の 1 つを指定します。各リージョンのレプリケーション係数は 3 です。
    + `CLIENT_SIDE_TIMESTAMPS` – デフォルトは です`DISABLED`。ステータスは にのみ変更できます`ENABLED`。

**例**

次の例に示すようにキースペースを変更してタグを追加します。

```
ALTER KEYSPACE my_keyspace ADD TAGS {'key1':'val1', 'key2':'val2'};
```

マルチリージョンキースペースに 3 番目のリージョンを追加するには、次のステートメントを使用できます。

```
ALTER KEYSPACE my_keyspace
WITH REPLICATION = {
    'class': 'NetworkTopologyStrategy',
    'us-east-1': '3',
    'us-west-2': '3',
    'us-west-1': '3'
} AND CLIENT_SIDE_TIMESTAMPS = {'status': 'ENABLED'};
```

## DROP KEYSPACE
<a name="cql.ddl.keyspace.drop"></a>

`DROP KEYSPACE` ステートメントを使用してキー空間(テーブルなどあらゆるコンテンツを含む)を削除します。

[**Syntax (構文)**]

```
drop_keyspace_statement ::= 
    DROP KEYSPACE [ IF EXISTS ] keyspace_name
```

Where:
+ *keyspace\$1name* は、削除 (ドロップ) されるキー空間の名前です。

**例**

```
DROP KEYSPACE my_keyspace;
```

## 使用
<a name="cql.ddl.keyspace.use"></a>

`USE` ステートメントを使用して、現在のキースペースを定義します。これにより、キースペースプレフィックスを含む完全修飾名を使用せずに、テーブルやタイプなど、特定のキースペースにバインドされたオブジェクトを参照できます。

**[Syntax]** (構文)

```
use_statement ::= 
    USE keyspace_name
```

Where:
+ *keyspace\$1name* は、使用するキースペースの名前です。

**例**

```
USE my_keyspace;
```

# テーブル
<a name="cql.ddl.table"></a>

*テーブル*は Amazon Keyspaces の主要なデータ構造です。テーブル内のデータは行と列で編成されます。これらの列のサブセットは、パーティションキーの指定によるパーティショニング (および最終的にはデータ配置) を決定するために使用されます。

別の列セットをクラスタリング列に定義できます。つまり、クエリ実行に述語として盛り込めるということです。

デフォルトでは、新規のテーブルは*オンデマンド*のスループットキャパシティがある状態で作成されます。新規のテーブルと既存のテーブルのキャパシティモードは変更できます。読み込み/書き込みのキャパシティスループットモードの詳細については、「[Amazon Keyspaces で読み取り/書き込みのキャパシティモードを設定する](ReadWriteCapacityMode.md)」を参照してください。

プロビジョンドモードのテーブルでは、オプションの `AUTOSCALING_SETTINGS` を設定できます。Amazon Keyspaces の自動スケーリングと使用可能なオプションの詳細については、「[既存のテーブルに対して自動スケーリングを設定する](autoscaling.configureTable.md)」を参照してください。

Amazon Keyspaces テーブルのクォータ制限と制約については、「[Amazon Keyspaces (Apache Cassandra 向け) のクォータ](quotas.md)」を参照してください。

**Topics**
+ [CREATE TABLE](#cql.ddl.table.create)
+ [ALTER TABLE](#cql.ddl.table.alter)
+ [RESTORE TABLE](#cql.ddl.table.restore)
+ [DROP TABLE](#cql.ddl.table.drop)

## CREATE TABLE
<a name="cql.ddl.table.create"></a>

`CREATE TABLE` ステートメントを使用して新しいテーブルを作成します。

 [**Syntax (構文)**]

```
create_table_statement ::=  CREATE TABLE [ IF NOT EXISTS ] table_name
    '('
        column_definition 
        ( ',' column_definition )*
        [ ',' PRIMARY KEY '(' primary_key ')' ]
    ')' [ WITH table_options ]

column_definition      ::=  column_name cql_type [ FROZEN ][ STATIC ][ PRIMARY KEY]

primary_key            ::=  partition_key [ ',' clustering_columns ]

partition_key          ::=  column_name
                              | '(' column_name ( ',' column_name )* ')'

clustering_columns     ::=  column_name ( ',' column_name )*

table_options          ::=  [table_options]
                              | CLUSTERING ORDER BY '(' clustering_order ')' [ AND table_options ]
                              | cdc
                              | CUSTOM_PROPERTIES
                              | AUTOSCALING_SETTINGS
                              | default_time_to_live
                              | TAGS

clustering_order       ::=  column_name (ASC | DESC) ( ',' column_name (ASC | DESC) )*
```

Where:
+ `table_name` は作成するテーブルの名前です。完全修飾名には、キースペースプレフィックスが含まれます。または、keyspace ステートメントを使用して現在の`USE`キースペースを設定することもできます。
+ `column_definition` は以下で構成されます。
  +  *`column_name`* – 列の名前。
  + `cql_type` — Amazon Keyspaces のデータ型 (「[データ型](cql.elements.md#cql.data-types)」を参照)。
  + `FROZEN` – ユーザー定義またはタイプ `collection` (、、 など`SET``MAP`) `LIST`のこの列をフリーズとして指定します。*フリーズ*コレクションは 1 つの不変の値にシリアル化され、`BLOB`と同様に扱われます。詳細については、「[コレクション型](cql.elements.md#cql.data-types.collection)」を参照してください。
  + `STATIC` — この列を静的として指定します。静的列には、同じパーティション内のすべての行で共有される値が保存されます。
  + `PRIMARY KEY` — この列をテーブルのプライマリキーとして指定します。
+ `primary_key` は以下で構成されます。
  + `partition_key`
  + `clustering_columns`
+ `partition_key`:
  + パーティションキーは、1 つの列である場合もあれば、2 つ以上の列で構成される複合値である場合もあります。プライマリキーのパーティションキー部分は必須で、これによって Amazon Keyspaces におけるデータの保存方法が決まります。
+ `clustering_columns`:
  + プライマリキーのオプションのクラスタリング列部分は、各パーティションにおけるデータのクラスター処理方法とソート方法を決定するものです。
+ `table_options` は以下で構成されます。
  + *`CLUSTERING ORDER BY`* — テーブルのデフォルトの CLUSTERING ORDER は、`ASC` (昇順) ソート方向のクラスタリングキーで構成されます。デフォルトのソート動作をオーバーライドするには、この値を指定します。
  +  *`cdc`* – Amazon Keyspaces がテーブルの変更データキャプチャ (CDC) ストリームを作成するかどうかを指定するブール値。デフォルトは `false` です。ストリームを有効にする`view type`ときに を指定するには、 `cdc_specification`で `CUSTOM_PROPERTIES` を設定します。
  +  *`CUSTOM_PROPERTIES`* — Amazon Keyspaces に固有の設定のマップ。
    +  `capacity_mode`: テーブルの読み取り/書き込みスループットキャパシティモードを指定します。オプションは `throughput_mode:PAY_PER_REQUEST` と `throughput_mode:PROVISIONED` です。プロビジョンドキャパシティモードには入力として `read_capacity_units` と `write_capacity_units` が必要です。デフォルトは `throughput_mode:PAY_PER_REQUEST` です。
    +  `cdc_specification`: CDC ストリーム`view_type`の を指定します。オプションは以下のとおりです。
      + `NEW_AND_OLD_IMAGES` – 変更前と変更後の両方のバージョンの行。これがデフォルトです。
      + `NEW_IMAGE` – 変更後の行のバージョン。
      + `OLD_IMAGE` – 変更前の行のバージョン。
      + `KEYS_ONLY` – 変更された行のパーティションキーとクラスタリングキー。

      CDC ストリームの詳細については、「」を参照してください[Amazon Keyspaces での変更データキャプチャ (CDC) ストリームの使用](cdc.md)。コード例については、[Amazon Keyspaces で新しいテーブルを作成するときに CDC ストリームを有効にする](keyspaces-enable-cdc-new-table.md) を参照してください。
    +  `client_side_timestamps`: テーブルに対してクライアント側のタイムスタンプを有効にするか無効にするかを指定します。オプションは `{'status': 'enabled'}` と `{'status': 'disabled'}` です。指定しない場合、デフォルトの `status:disabled` になります。クライアント側のタイムスタンプをテーブルで有効にした後は、この設定を無効にすることはできません。
    +  `encryption_specification`: 保管データ暗号化の暗号化オプションを指定します。指定しない場合、デフォルトの `encryption_type:AWS_OWNED_KMS_KEY` になります。暗号化オプションのカスタマーマネージドキーでは、入力として Amazon リソースネーム (ARN) 形式の AWS KMS キーが必要です: `kms_key_identifier:ARN`: `kms_key_identifier:ARN`。
    +  `point_in_time_recovery`: テーブルに対してポイントインタイムリストアを有効にするか無効にするかを指定します。オプションは `status:enabled` と `status:disabled` です。指定しない場合、デフォルトの `status:disabled` になります。
    + `replica_updates`: マルチリージョンテーブルの AWS リージョン固有の設定を指定します。マルチリージョンテーブルの場合、テーブルの読み取りキャパシティの設定を AWS リージョンごとに変えることができます。その場合は、次のパラメータを設定します。詳細な説明と例については、[Amazon Keyspaces で自動スケーリングが有効なプロビジョンドモードのマルチリージョンテーブルを作成する](tables-mrr-create-provisioned.md) を参照してください。
      + `region` – 次の設定のテーブルレプリカ AWS リージョン の 。
        + `read_capacity_units`
    +  `TTL`: テーブルの 有効期限 (TTL) カスタム設定を有効にします。有効にする場合は、`status:enabled` を使用します。デフォルトは `status:disabled` です。`TTL` を有効にした後、そのテーブルに対してそれを無効にすることはできません。
  + `AUTOSCALING_SETTINGS` には、プロビジョンドモードのテーブルに対する次のオプションの設定が含まれています。詳細な説明と例については、[自動スケーリングを有効にして新規テーブルを作成する](autoscaling.createTable.md) を参照してください。
    + `provisioned_write_capacity_autoscaling_update`:
      + `autoscaling_disabled` – 書き込みキャパシティの自動スケーリングを有効にするには、値を `false` に設定します。デフォルトは `true` です。(オプション)
      + `minimum_units` – テーブルで常に処理できるようにしておくべき最低限の書き込みスループット。1 から、アカウントの秒単位のスループット上限 (デフォルトは 40,000) までの値を指定する必要があります。
      + `maximum_units` – テーブルで常に処理できるようにしておくべき最大限の書き込みスループット。1 から、アカウントの秒単位のスループット上限 (デフォルトは 40,000) までの値を指定する必要があります。
      + `scaling_policy` – Amazon Keyspaces はターゲット追跡ポリシーに対応しています。自動スケーリングのターゲットは、テーブルのプロビジョニング済みの書き込みキャパシティです。
        + `target_tracking_scaling_policy_configuration` – ターゲット追跡ポリシーを定義するには、目標 (ターゲット) 値を定義する必要があります。ターゲット追跡とクールダウン期間の詳細については、「Application Auto Scaling ユーザーガイド**」の「[ターゲット追跡スケーリングポリシー](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)」を参照してください。
          + `target_value` – テーブルの目標とする使用率。Amazon Keyspaces の自動スケーリングでは、プロビジョニング済みのキャパシティに占める実際のキャパシティ消費の割合が、この値と同じか近い値で維持されます。`target_value` をパーセンテージとして定義します。20～90 の倍精度浮動小数点数。(必須)
          + `scale_in_cooldown` – スケーリングアクティビティ間のクールダウン期間 (秒数)。この期間を使って、別のスケールインアクティビティが開始する前にテーブルを安定させます。値を指定しない場合、デフォルト値は 0 です。(オプション)
          + `scale_out_cooldown` – スケーリングアクティビティ間のクールダウン期間 (秒数)。この期間を使って、別のスケールアウトアクティビティが開始する前にテーブルを安定させます。値を指定しない場合、デフォルト値は 0 です。(オプション)
          + `disable_scale_in`: テーブルに対して `scale-in` が無効か有効かを指定する`boolean`。このパラメータは、デフォルトでは無効になっています。`scale-in` を有効にするには、`boolean` 値を `FALSE` に設定します。その場合は、テーブルのキャパシティが自動的にスケールダウンされます。(オプション) 
    + `provisioned_read_capacity_autoscaling_update`:
      + `autoscaling_disabled` – 読み取りキャパシティの自動スケーリングを有効にするには、値を `false` に設定します。デフォルトは `true` です。(オプション)
      + `minimum_units` – テーブルで常に処理できるようにしておくべき最低限のスループット。1 から、アカウントの秒単位のスループット上限 (デフォルトは 40,000) までの値を指定する必要があります。
      + `maximum_units` – テーブルで常に処理できるようにしておくべき最大限のスループット。1 から、アカウントの秒単位のスループット上限 (デフォルトは 40,000) までの値を指定する必要があります。
      + `scaling_policy` – Amazon Keyspaces はターゲット追跡ポリシーに対応しています。自動スケーリングのターゲットは、テーブルのプロビジョニング済みの読み取りキャパシティです。
        + `target_tracking_scaling_policy_configuration` – ターゲット追跡ポリシーを定義するには、目標 (ターゲット) 値を定義する必要があります。ターゲット追跡とクールダウン期間の詳細については、「Application Auto Scaling ユーザーガイド**」の「[ターゲット追跡スケーリングポリシー](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)」を参照してください。
          + `target_value` – テーブルの目標とする使用率。Amazon Keyspaces の自動スケーリングでは、プロビジョニング済みのキャパシティに占める実際のキャパシティ消費の割合が、この値と同じか近い値で維持されます。`target_value` をパーセンテージとして定義します。20～90 の倍精度浮動小数点数。(必須)
          + `scale_in_cooldown` – スケーリングアクティビティ間のクールダウン期間 (秒数)。この期間を使って、別のスケールインアクティビティが開始する前にテーブルを安定させます。値を指定しない場合、デフォルト値は 0 です。(オプション)
          + `scale_out_cooldown` – スケーリングアクティビティ間のクールダウン期間 (秒数)。この期間を使って、別のスケールアウトアクティビティが開始する前にテーブルを安定させます。値を指定しない場合、デフォルト値は 0 です。(オプション)
          + `disable_scale_in`: テーブルに対して `scale-in` が無効か有効かを指定する`boolean`。このパラメータは、デフォルトでは無効になっています。`scale-in` を有効にするには、`boolean` 値を `FALSE` に設定します。その場合は、テーブルのキャパシティが自動的にスケールダウンされます。(オプション) 
    + `replica_updates`: マルチリージョンテーブルの AWS リージョン 特定の自動スケーリング設定を指定します。マルチリージョンテーブルの場合、テーブルの読み取りキャパシティの設定を AWS リージョンごとに変えることができます。その場合は、次のパラメータを設定します。詳細な説明と例については、[Amazon Keyspaces でマルチリージョンテーブルのプロビジョンドキャパシティと自動スケーリングの設定を更新する](tables-mrr-autoscaling.md) を参照してください。
      + `region` – 次の設定のテーブルレプリカ AWS リージョン の 。
        + `provisioned_read_capacity_autoscaling_update`
          + `autoscaling_disabled` – テーブルの読み取りキャパシティの自動スケーリングを有効にするには、値を `false` に設定します。デフォルトは `true` です。(オプション) 
**注記**  
マルチリージョンテーブルの自動スケーリングは、そのテーブルのすべてのレプリカに対して有効または無効にする必要があります。
          + `minimum_units` – テーブルで常に処理できるようにしておくべき最低限の読み取りスループット。1 から、アカウントの秒単位のスループット上限 (デフォルトは 40,000) までの値を指定する必要があります。
          + `maximum_units` – テーブルで常に処理できるようにしておくべき最大限の読み取りスループット。1 から、アカウントの秒単位のスループット上限 (デフォルトは 40,000) までの値を指定する必要があります。
          + `scaling_policy` – Amazon Keyspaces はターゲット追跡ポリシーに対応しています。自動スケーリングのターゲットは、テーブルのプロビジョニング済みの読み取りキャパシティです。
            + `target_tracking_scaling_policy_configuration` – ターゲット追跡ポリシーを定義するには、目標 (ターゲット) 値を定義する必要があります。ターゲット追跡とクールダウン期間の詳細については、「Application Auto Scaling ユーザーガイド**」の「[ターゲット追跡スケーリングポリシー](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)」を参照してください。
              + `target_value` – テーブルの目標とする使用率。Amazon Keyspaces の自動スケーリングは、プロビジョニング済みの読み取りキャパシティに占める実際の読み取りキャパシティ消費の割合が、この値と同じか近い値で維持されます。`target_value` をパーセンテージとして定義します。20～90 の倍精度浮動小数点数。(必須)
              + `scale_in_cooldown` – スケーリングアクティビティ間のクールダウン期間 (秒数)。この期間を使って、別のスケールインアクティビティが開始する前にテーブルを安定させます。値を指定しない場合、デフォルト値は 0 です。(オプション)
              + `scale_out_cooldown` – スケーリングアクティビティ間のクールダウン期間 (秒数)。この期間を使って、別のスケールアウトアクティビティが開始する前にテーブルを安定させます。値を指定しない場合、デフォルト値は 0 です。(オプション)
              + `disable_scale_in`: テーブルに対して `scale-in` が無効か有効かを指定する`boolean`。このパラメータは、デフォルトでは無効になっています。`scale-in` を有効にするには、`boolean` 値を `FALSE` に設定します。つまり、テーブルの読み取りキャパシティが自動的にスケールダウンされます。(オプション) 
  + `default_time_to_live` — テーブルのデフォルトの有効期限 (TTL) 設定 (秒)。
  + `TAGS` – 作成時にリソースにアタッチされるキーバリューペアタグのリスト。
  + `clustering_order` は以下で構成されます。
    +  *`column_name`* – 列の名前。
    +  *`ASC | DESC`* — 昇順修飾子 (`ASC`) または降順修飾子 (`DESC`) を設定します。指定しない場合、デフォルトの順序 ASC になります。

**例**

```
CREATE TABLE IF NOT EXISTS my_keyspace.my_table (
                                            id text,
                                            name text,
                                            region text,
                                            division text,
                                            project text,
                                            role text,
                                            pay_scale int,
                                            vacation_hrs float,
                                            manager_id text,
                                            PRIMARY KEY (id,division))
                                            WITH CUSTOM_PROPERTIES={
                                                'capacity_mode':{
                                                        'throughput_mode': 'PROVISIONED', 'read_capacity_units': 10, 'write_capacity_units': 20
                                                    },
                                                'point_in_time_recovery':{'status': 'enabled'},
                                                'encryption_specification':{
                                                        'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 
                                                        'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111'
                                                    }
                                            }
                                            AND CLUSTERING ORDER BY (division ASC) 
                                            AND TAGS={'key1':'val1', 'key2':'val2'}
                                            AND default_time_to_live = 3024000;
```

クラスタリング列を使用しているテーブルでは、テーブル定義で非クラスタリング列を静的として宣言できます。静的列の詳細については、「[Amazon Keyspaces の静的列のキャパシティ消費量を推定する](static-columns.md)」を参照してください。

**例**

```
CREATE TABLE my_keyspace.my_table (
                                            id int,
                                            name text,
                                            region text,
                                            division text,
                                            project text STATIC,
                                            PRIMARY KEY (id,division));
```

ユーザー定義タイプ (UDT) を使用する列を使用してテーブルを作成できます。例の最初のステートメントは タイプを作成し、2 番目のステートメントは タイプを使用する列を持つテーブルを作成します。

**例**

```
CREATE TYPE my_keyspace."udt""N@ME" (my_field int);
CREATE TABLE my_keyspace.my_table (my_col1 int pri key, my_col2 "udt""N@ME");
```

## ALTER TABLE
<a name="cql.ddl.table.alter"></a>

`ALTER TABLE` ステートメントを使用して、新しい列の追加、タグの追加、テーブルのカスタムプロパティの変更を行います。

**[Syntax]** (構文)

```
alter_table_statement ::=  ALTER TABLE table_name    
 
        [ ADD ( column_definition | column_definition_list)  ] 
        [[ADD | DROP] TAGS {'key1':'val1', 'key2':'val2'}]            
        [ WITH table_options [ , ... ] ] ;
        
column_definition      ::=  column_name cql_type
```

Where:
+ `table_name` は変更するテーブルの名前です。
+ `column_definition` は追加する列の名前とデータ型です。
+ `column_definition_list` は括弧内に配置された列のリストでカンマで区切られています。
+ `table_options` は以下で構成されます。
  + `AUTOSCALING_SETTINGS` には、プロビジョニング済みのテーブルに対するオプションの自動スケーリング設定が含まれています。構文と詳しい説明については、「[CREATE TABLE](#cql.ddl.table.create)」を参照してください。例については「[既存のテーブルに対して自動スケーリングを設定する](autoscaling.configureTable.md)」を参照してください。
  +  *`cdc`* – Amazon Keyspaces がテーブルの変更データキャプチャ (CDC) ストリームを作成するかどうかを指定するブール値。デフォルトは `false` です。ストリームを有効にする`view type`ときに を指定するには、 `cdc_specification`で `CUSTOM_PROPERTIES` を設定します。
  +  *`CUSTOM_PROPERTIES`* — Amazon Keyspaces に固有の設定のマップ。
    +  `capacity_mode`: テーブルの読み取り/書き込みスループットキャパシティモードを指定します。オプションは `throughput_mode:PAY_PER_REQUEST` と `throughput_mode:PROVISIONED` です。プロビジョンドキャパシティモードには入力として `read_capacity_units` と `write_capacity_units` が必要です。デフォルトは `throughput_mode:PAY_PER_REQUEST` です。
    +  `cdc_specification`: CDC ストリーム`view_type`の を指定します。オプションは以下のとおりです。
      + `NEW_AND_OLD_IMAGES` – 変更前と変更後の両方のバージョンの行。これがデフォルトです。
      + `NEW_IMAGE` – 変更後の行のバージョン。
      + `OLD_IMAGE` – 変更前の行のバージョン。
      + `KEYS_ONLY` – 変更された行のパーティションキーとクラスタリングキー。

      CDC ストリームの詳細については、「」を参照してください[Amazon Keyspaces での変更データキャプチャ (CDC) ストリームの使用](cdc.md)。コード例については、[Amazon Keyspaces で既存のテーブルの CDC ストリームを有効にする](keyspaces-enable-cdc-alter-table.md) を参照してください。
    +  `client_side_timestamps`: テーブルに対してクライアント側のタイムスタンプを有効にするか無効にするかを指定します。オプションは `{'status': 'enabled'}` と `{'status': 'disabled'}` です。指定しない場合、デフォルトの `status:disabled` になります。クライアント側のタイムスタンプをテーブルで有効にした後は、この設定を無効にすることはできません。
    +  `encryption_specification`: 保管データ暗号化の暗号化オプションを指定します。オプションは `encryption_type:AWS_OWNED_KMS_KEY` と `encryption_type:CUSTOMER_MANAGED_KMS_KEY` です。暗号化オプションのカスタマーマネージドキーには、入力として Amazon リソースネーム (ARN) 形式の AWS KMS キーが必要です: `kms_key_identifier:ARN`。
    +  `point_in_time_recovery`: テーブルに対してポイントインタイムリストアを有効にするか無効にするかを指定します。オプションは `status:enabled` と `status:disabled` です。デフォルトは `status:disabled` です。
    + `replica_updates`: マルチリージョンテーブルの特定 AWS リージョン の設定を指定します。マルチリージョンテーブルの場合、テーブルの読み取りキャパシティの設定を AWS リージョンごとに変えることができます。その場合は、次のパラメータを設定します。詳細な説明と例については、[Amazon Keyspaces でマルチリージョンテーブルのプロビジョンドキャパシティと自動スケーリングの設定を更新する](tables-mrr-autoscaling.md) を参照してください。
      + `region` – 次の設定のテーブルレプリカ AWS リージョン の 。
        + `read_capacity_units` 
    +  `ttl`: テーブルの 有効期限 (TTL) カスタム設定を有効にします。有効にする場合は、`status:enabled` を使用します。デフォルトは `status:disabled` です。`ttl` を有効にした後、そのテーブルに対してそれを無効にすることはできません。
+ `default_time_to_live`: テーブルのデフォルトの有効期限 (TTL) 設定 (秒)。
+ `TAGS` はリソースにアタッチされるキーバリューペアタグのリストです。

**注記**  
ALTER TABLE では、1 つのカスタムプロパティしか変更できません。同一ステートメント内で複数の ALTER TABLE コマンドを組み合わせることはできません。

**例**

次のステートメントは、既存のテーブルに列を追加する方法を示しています。

```
ALTER TABLE mykeyspace.mytable ADD (ID int);
```

このステートメントは、既存のテーブルに 2 つのコレクション列を追加する方法を示します。
+ ネストされたフリーズコレクションを含むフリーズコレクション列 `col_frozen_list`
+ ネストされたフリーズコレクションを含む非フリーズコレクション列 `col_map`

```
ALTER TABLE my_Table ADD(col_frozen_list FROZEN<LIST<FROZEN<SET<TEXT>>>>, col_map MAP<INT, FROZEN<SET<INT>>>);
```

次の例は、ユーザー定義タイプ (UDT) を使用する列をテーブルに追加する方法を示しています。

```
ALTER TABLE my_keyspace.my_table ADD (my_column, my_udt;);
```

テーブルのキャパシティモードを変更し、読み取りおよび書き込みのキャパシティユニットを指定するには、次のステートメントを使用します。

```
ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={'capacity_mode':{'throughput_mode': 'PROVISIONED', 'read_capacity_units': 10, 'write_capacity_units': 20}};
```

次のステートメントでは、テーブルのカスタマー管理 KMS キーが指定されます。

```
ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={     
              'encryption_specification':{ 
                      'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 
                      'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111'     
                  } 
         };
```

テーブルのポイントインタイムリストアを有効にするには、次のステートメントを使用できます。

```
ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={'point_in_time_recovery': {'status': 'enabled'}};
```

テーブルのデフォルトの有効期限 (TTL) 値を秒単位で設定するには、次のステートメントを使用します。

```
ALTER TABLE my_table WITH default_time_to_live = 2592000;
```

このステートメントは、テーブルのカスタムの有効期限 (TTL) 設定を有効にします。

```
ALTER TABLE mytable WITH CUSTOM_PROPERTIES={'ttl':{'status': 'enabled'}};
```

## RESTORE TABLE
<a name="cql.ddl.table.restore"></a>

`RESTORE TABLE` ステートメントを使用して、特定時点 (ポイントインタイム) にテーブルを復元 (リストア) します。このステートメントでは、テーブルでポイントインタイムリカバリを有効にする必要があります。詳細については、「[Amazon Keyspaces のポイントインタイムリカバリでデータをバックアップおよび復元する](PointInTimeRecovery.md)」を参照してください。

**[Syntax]** (構文)

```
restore_table_statement ::=  
    RESTORE TABLE restored_table_name FROM TABLE source_table_name 
                    [ WITH table_options [ , ... ] ];
```

Where:
+ `restored_table_name` は復元されたテーブルの名前です。
+ `source_table_name` はソーステーブルの名前です。
+ `table_options` は以下で構成されます。
  + `restore_timestamp` は ISO 8601 形式の復元ポイントタイムです。これが指定されない場合は、現在のタイムスタンプが使用されます。
  +  *`CUSTOM_PROPERTIES`* — Amazon Keyspaces に固有の設定のマップ。
    +  `capacity_mode`: テーブルの読み取り/書き込みスループットキャパシティモードを指定します。オプションは `throughput_mode:PAY_PER_REQUEST` と `throughput_mode:PROVISIONED` です。プロビジョンドキャパシティモードには入力として `read_capacity_units` と `write_capacity_units` が必要です。デフォルトは、ソーステーブルの現在の設定です。
    +  `encryption_specification`: 保管データ暗号化の暗号化オプションを指定します。オプションは `encryption_type:AWS_OWNED_KMS_KEY` と `encryption_type:CUSTOMER_MANAGED_KMS_KEY` です。暗号化オプションのカスタマーマネージドキーでは、入力として Amazon リソースネーム (ARN) 形式の AWS KMS キー が必要です。 `kms_key_identifier:ARN`カスタマーマネージドキーで暗号化されたテーブルを で暗号化されたテーブルに復元するには AWS 所有のキー、Amazon Keyspaces はソーステーブルの AWS KMS キーにアクセスする必要があります。
    +  `point_in_time_recovery`: テーブルに対してポイントインタイムリストアを有効にするか無効にするかを指定します。オプションは `status:enabled` と `status:disabled` です。新しいテーブルを作成する場合とは異なり、復元されたテーブルのデフォルトのステータスは `status:enabled` になります。これは設定がソーステーブルから継承されるためです。復元されたテーブルの PITR を無効にするには、`status:disabled` を明示的に設定する必要があります。
    + `replica_updates`: マルチリージョンテーブルの特定 AWS リージョン の設定を指定します。マルチリージョンテーブルの場合、テーブルの読み取りキャパシティの設定を AWS リージョンごとに変えることができます。その場合は、次のパラメータを設定します。
      + `region` – 次の設定のテーブルレプリカ AWS リージョン の 。
        + `read_capacity_units` 
  + `AUTOSCALING_SETTINGS` には、プロビジョニング済みのテーブルに対するオプションの自動スケーリング設定が含まれています。構文と詳しい説明については、「[CREATE TABLE](#cql.ddl.table.create)」を参照してください。
  + `TAGS` はリソースにアタッチされるキーバリューペアタグのリストです。

**注記**  
削除されたテーブルは、削除時にのみ復元できます。

**例**

```
RESTORE TABLE mykeyspace.mytable_restored from table mykeyspace.my_table 
WITH restore_timestamp = '2020-06-30T04:05:00+0000'
AND custom_properties = {'point_in_time_recovery':{'status':'disabled'}, 'capacity_mode':{'throughput_mode': 'PROVISIONED', 'read_capacity_units': 10, 'write_capacity_units': 20}}
AND TAGS={'key1':'val1', 'key2':'val2'};
```

## DROP TABLE
<a name="cql.ddl.table.drop"></a>

キー空間からテーブルを削除するには `DROP TABLE` ステートメントを使用します。

**[Syntax]** (構文)

```
drop_table_statement ::=  
    DROP TABLE [ IF EXISTS ] table_name
```

Where:
+ `IF EXISTS` により、テーブルが存在しない場合の `DROP TABLE` の失敗が阻止されます。(オプション)
+ `table_name` は削除 (ドロップ) されるテーブルの名前です。

**例**

```
DROP TABLE my_keyspace.my_table;
```

# ユーザー定義タイプ (UDTs)
<a name="cql.ddl.type"></a>

*UDT* – Amazon Keyspaces で 1 つの列を定義するために使用できるフィールドとデータ型のグループ化。UDTs の有効なデータ型は、同じキースペースで既に作成したコレクションやその他の UDTs を含む、サポートされているすべての Cassandra データ型です。サポートされている Cassandra データ型の詳細については、「」を参照してください[Cassandra データ型サポート](cassandra-apis.md#cassandra-data-type)。

```
user_defined_type::= udt_name
udt_name::= [ keyspace_name '.' ] identifier
```

**Topics**
+ [CREATE TYPE](#cql.ddl.type.create)
+ [DROP TYPE](#cql.ddl.type.drop)

## CREATE TYPE
<a name="cql.ddl.type.create"></a>

`CREATE TYPE` ステートメントを使用して新しいタイプを作成します。

 **[Syntax]** (構文)

```
create_type_statement ::=  CREATE TYPE [ IF NOT EXISTS ] udt_name
    '('field_definition ( ',' field_definition)* ')'
            field_definition::= identifier cql_type
```

Where:
+ `IF NOT EXISTS` タイプが既に存在する場合、 は失敗`CREATE TYPE`しません。(オプション)
+ `udt_name` は、タイプ形式の UDT の完全修飾名です`my_keyspace.my_type`。例: 。`USE` ステートメントで現在のキースペースを定義する場合、キースペース名を指定する必要はありません。
+ `field_definition` は名前とタイプで構成されます。

次の表は、許可された UDT 名の例を示しています。最初の列はタイプの作成時に名前を入力する方法を示し、2 番目の列は Amazon Keyspaces が内部で名前をフォーマットする方法を示しています。Amazon Keyspaces では、 のようなオペレーションにフォーマットされた名前が必要です`GetType`。


| 入力した名前 | フォーマットされた名前 | メモ | 
| --- | --- | --- | 
|  MY\$1UDT  | my\$1udt | 二重引用符を使用しない場合、Amazon Keyspaces はすべての大文字を小文字に変換します。 | 
|  "MY\$1UDT"  | MY\$1UDT | 二重引用符を使用すると、Amazon Keyspaces は大文字を尊重し、フォーマットされた名前から二重引用符を削除します。 | 
|  "1234"  | 1234 | 二重引用符を使用すると、名前は数字で始まることができ、Amazon Keyspaces はフォーマットされた名前から二重引用符を削除します。 | 
|  "Special\$1Ch@r@cters<>\$1\$1"  | Special\$1Ch@r@cters<>\$1\$1 | 二重引用符では、名前に特殊文字を含めることができ、Amazon Keyspaces はフォーマットされた名前から二重引用符を削除します。 | 
|  "nested""""""quotes"  | nested"""quotes | Amazon Keyspaces は、フォーマットされた名前から外部二重引用符とエスケープ二重引用符を削除します。 | 

**例**

```
CREATE TYPE my_keyspace.phone (
    country_code int,
    number text
);
```

ネストされた UDTs がフリーズしている場合は、UDT をネストできます。タイプのデフォルト値とクォータの詳細については、「」を参照してください[Amazon Keyspaces UDT クォータとデフォルト値](quotas.md#udt-table)。

```
CREATE TYPE my_keyspace.user (
    first_name text,
    last_name text,
    phones FROZEN<phone>
);
```

UDTs「」を参照してください[Amazon Keyspaces でのユーザー定義型 (UDT)](udts.md)。

## DROP TYPE
<a name="cql.ddl.type.drop"></a>

`DROP TYPE` ステートメントを使用して UDT を削除します。削除できるのは、別のタイプまたはテーブルで使用されていないタイプのみです。

 **[Syntax]** (構文)

```
drop_type_statement ::=  DROP TYPE [ IF EXISTS ] udt_name
```

Where:
+ `IF EXISTS` タイプが存在しない場合、 は失敗`DROP TYPE`しません。(オプション)
+ `udt_name` は、タイプ形式の UDT の完全修飾名です`my_keyspace.my_type`。例: 。`USE` ステートメントで現在のキースペースを定義する場合、キースペース名を指定する必要はありません。

**例**

```
DROP TYPE udt_name;
```

# Amazon Keyspaces の DML ステートメント (データ操作言語)
<a name="cql.dml"></a>

*データ操作言語* (DML) は、Amazon Keyspaces (Apache Cassandra 向け) テーブル内でのデータ管理に使用する Cassandra Query Language (CQL) ステートメントのセットです。DML ステートメントを使用して、テーブル内のデータを追加、変更、または削除します。

また、DML ステートメントを使用して、テーブル内のデータをクエリすることもできます。(CQL は結合とサブクエリに対応していないので注意が必要です。)

**Topics**
+ [SELECT](cql.dml.select.md)
+ [INSERT](cql.dml.insert.md)
+ [UPDATE](cql.dml.update.md)
+ [DELETE](cql.dml.delete.md)

# SELECT
<a name="cql.dml.select"></a>

SELECT ステートメントを使用してデータのクエリを行います。

**[Syntax]** (構文)

```
select_statement ::=  SELECT  [ JSON ] ( select_clause | '*' )
                      FROM table_name
                      [ WHERE 'where_clause' ]
                      [ ORDER BY 'ordering_clause' ]
                      [ LIMIT (integer | bind_marker) ]
                      [ ALLOW FILTERING ]
select_clause    ::=  selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector         ::=  column_name
                      | term
                      | CAST '(' selector AS cql_type ')'
                      | function_name '(' [ selector ( ',' selector )* ] ')'
where_clause     ::=  relation ( AND relation )*
relation         ::=  column_name operator term
                      TOKEN
operator         ::=  '=' | '<' | '>' | '<=' | '>=' | IN | CONTAINS | CONTAINS KEY
ordering_clause  ::=  column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*
```

**例**

```
SELECT name, id, manager_id FROM "myGSGKeyspace".employees_tbl ;

SELECT JSON name, id, manager_id FROM "myGSGKeyspace".employees_tbl ;
```

エンコードされた JSON データ型が Amazon Keyspaces のデータ型にマッピングされるテーブルについては、「[Amazon Keyspaces データ型の JSON エンコード](cql.elements.md#cql.data-types.JSON)」を参照してください。

**`IN` キーワードの使用**

`IN` キーワードは、1 つ以上の値が等しいことを指定します。パーティションキーとクラスタリング列に適用できます。結果は `SELECT` ステートメントにキーが示されている順序で返されます。

**例**

```
SELECT * from mykeyspace.mytable WHERE primary.key1 IN (1,2) and clustering.key1 = 2;
SELECT * from mykeyspace.mytable WHERE primary.key1 IN (1,2) and clustering.key1 <= 2;
SELECT * from mykeyspace.mytable WHERE primary.key1 = 1 and clustering.key1 IN (1, 2);
SELECT * from mykeyspace.mytable WHERE primary.key1 <= 2 and clustering.key1 IN (1, 2) ALLOW FILTERING;
```

`IN` キーワードと Amazon Keyspaces がステートメントを処理する方法の詳細については、[Amazon Keyspaces でクエリの `SELECT` ステートメントで `IN` 演算子を使用する](in.select.md) を参照してください。

**結果の順序付け**

`ORDER BY` 句は、返された結果のソート順序を指定するものです。列名のリストと各列のソート順序を引数として受け取ります。順序句のクラスタリング列のみ指定できます。非クラスタリング列は許容されません。ソート順序のオプションは、昇順の `ASC` と降順の `DESC` です。ソート順序を省略すると、クラスタリング列のデフォルトの順序が使用されます。可能なソート順序については、「[Amazon Keyspaces で `ORDER BY` を使用して結果を並べ替える](ordering-results.md)」を参照してください。

**例**

```
SELECT name, id, division, manager_id FROM "myGSGKeyspace".employees_tbl WHERE id = '012-34-5678' ORDER BY division;
```

`IN` キーワードと一緒に `ORDER BY` を使用すると、結果はページ内で順序付けられます。ページ分割を無効にした状態での完全な並べ替えはサポートしていません。

**トークン**

`TOKEN`関数は、`SELECT` 節と `WHERE` 節の `PARTITION KEY` 列に適用できます。`TOKEN` 関数を使用すると、Amazon Keyspaces は `PARTITION KEY` の値ではなくの `PARTITION_KEY` マッピングされたトークン値に基づいて行を返します。

`TOKEN` キーワードではリレーションはサポートしていません。`IN`

**例**

```
SELECT TOKEN(id) from my_table; 

SELECT TOKEN(id) from my_table WHERE TOKEN(id) > 100 and TOKEN(id) < 10000;
```

**TTL 関数**

`TTL` 関数を `SELECT` ステートメントと共に使用すると、列に保存されている有効期限を秒単位で取得できます。どの `TTL` 値も設定されていない場合、関数は `null` を返します。

**例**

```
SELECT TTL(my_column) from my_table;
```

`TTL` 関数は、コレクションなどのマルチセル列には使用できません。

**WRITETIME 関数**

`SELECT` ステートメントで `WRITETIME` 関数を使用して、列の値のメタデータとして保存されているタイムスタンプを取得できるのは、テーブルがクライアント側のタイムスタンプを使用している場合だけです。詳細については、「[Amazon Keyspaces でのクライアント側のタイムスタンプ](client-side-timestamps.md)」を参照してください。

```
SELECT WRITETIME(my_column) from my_table;
```

`WRITETIME` 関数は、コレクションなどのマルチセル列には使用できません。

**注記**  
確立されている Cassandra ドライバーの動作との互換性を保つため、Cassandra ドライバーや開発者ツールから Cassandra クエリーランゲージ (CQL) API コールでシステムテーブルを操作するとき、タグベースの承認ポリシーは適用されません。詳細については、「[タグに基いた Amazon Keyspaces リソースアクセス](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-tags)」を参照してください。

# INSERT
<a name="cql.dml.insert"></a>

`INSERT` ステートメントを使用してテーブルに行を追加します。

**[Syntax]** (構文)

```
insert_statement ::=  INSERT INTO table_name ( names_values | json_clause )
                      [ IF NOT EXISTS ]
                      [ USING update_parameter ( AND update_parameter )* ]
names_values     ::=  names VALUES tuple_literal
json_clause      ::=  JSON string [ DEFAULT ( NULL | UNSET ) ]                
names            ::=  '(' column_name ( ',' column_name )* ')'
```

**例**

```
INSERT INTO "myGSGKeyspace".employees_tbl (id, name, project, region, division, role, pay_scale, vacation_hrs, manager_id)
VALUES ('012-34-5678','Russ','NightFlight','US','Engineering','IC',3,12.5, '234-56-7890') ;
```

**パラメータを更新する**

`INSERT` は以下の値を `update_parameter` としてサポートします。
+ `TTL` — 秒単位の時間値。設定可能な最大値は 630,720,000 秒で、20 年に相当します。
+ `TIMESTAMP` — 標準基準時間 epoch 1970 年 1 月 1 日 00:00:00 GMT からのマイクロ秒数を表す `bigint` 値。Amazon Keyspaces タイムスタンプは、過去 2 日間と将来 5 分の範囲とします。

**例**

```
INSERT INTO my_table (userid, time, subject, body, user)
        VALUES (B79CB3BA-745E-5D9A-8903-4A02327A7E09, 96a29100-5e25-11ec-90d7-b5d91eceda0a, 'Message', 'Hello','205.212.123.123')
        USING TTL 259200;
```

**JSON サポート**

エンコードされた JSON データ型が Amazon Keyspaces のデータ型にマッピングされるテーブルについては、「[Amazon Keyspaces データ型の JSON エンコード](cql.elements.md#cql.data-types.JSON)」を参照してください。

`JSON` キーワードを使用すれば、エンコードされた `JSON` マップを 1 行として挿入できます。テーブル内に存在しても、JSON insert ステートメントでは省略されている列については、`DEFAULT UNSET` を使用して既存の値を保持します。`DEFAULT NULL` を使用して、省略された列の各行に NULL 値を書き込み、既存の値をオーバーライドします (標準の書き込み料金が適用されます)。`DEFAULT NULL` はデフォルトのオプションです。

**例**

```
INSERT INTO "myGSGKeyspace".employees_tbl JSON '{"id":"012-34-5678",
                                                 "name": "Russ",
                                                 "project": "NightFlight",
                                                 "region": "US",
                                                 "division": "Engineering",
                                                 "role": "IC",
                                                 "pay_scale": 3,
                                                 "vacation_hrs": 12.5,
                                                 "manager_id": "234-56-7890"}';
```

JSON データに重複するキーが含まれている場合、Amazon Keyspaces ではキーの最後の値が保存されます (Apache Cassandra と同様)。以下の例で、重複キーは `id` であり、値 `234-56-7890` を使用します。

**例**

```
INSERT INTO "myGSGKeyspace".employees_tbl JSON '{"id":"012-34-5678",
                                                 "name": "Russ",
                                                 "project": "NightFlight",
                                                 "region": "US",
                                                 "division": "Engineering",
                                                 "role": "IC",
                                                 "pay_scale": 3,
                                                 "vacation_hrs": 12.5,
                                                 "id": "234-56-7890"}';
```

# UPDATE
<a name="cql.dml.update"></a>

`UPDATE` ステートメントを使用して、テーブル内の行を変更します。

[**Syntax (構文)**]

```
update_statement ::=  UPDATE table_name
                      [ USING update_parameter ( AND update_parameter )* ]
                      SET assignment ( ',' assignment )*
                      WHERE where_clause
                      [ IF ( EXISTS | condition ( AND condition )*) ]
update_parameter ::=  ( integer | bind_marker )
assignment       ::=  simple_selection '=' term
                     | column_name '=' column_name ( '+' | '-' ) term
                     | column_name '=' list_literal '+' column_name
simple_selection ::=  column_name
                     | column_name '[' term ']'
                     | column_name '.' `field_name
condition        ::=  simple_selection operator term
```

**例**

```
UPDATE "myGSGKeyspace".employees_tbl SET pay_scale = 5 WHERE id = '567-89-0123' AND division = 'Marketing' ;
```

`counter` を増やすには、次の構文を使用します。詳細については、「[カウンタ](cql.elements.md#cql.data-types.numeric.counters)」を参照してください。

```
UPDATE ActiveUsers SET counter = counter + 1  WHERE user = A70FE1C0-5408-4AE3-BE34-8733E5K09F14 AND action = 'click';
```

**パラメータを更新する**

`UPDATE` は以下の値を `update_parameter` としてサポートします。
+ `TTL` — 秒単位の時間値。設定可能な最大値は 630,720,000 秒で、20 年に相当します。
+ `TIMESTAMP` — 標準基準時間 epoch 1970 年 1 月 1 日 00:00:00 GMT からのマイクロ秒数を表す `bigint` 値。Amazon Keyspaces タイムスタンプは、過去 2 日間と将来 5 分の範囲とします。

**例**

```
UPDATE my_table (userid, time, subject, body, user)
        VALUES (B79CB3BA-745E-5D9A-8903-4A02327A7E09, 96a29100-5e25-11ec-90d7-b5d91eceda0a, 'Message', 'Hello again','205.212.123.123')
        USING TIMESTAMP '2022-11-03 13:30:54+0400';
```

# DELETE
<a name="cql.dml.delete"></a>

`DELETE` ステートメントを使用してテーブルから行を削除します。

[**Syntax (構文)**]

```
delete_statement ::=  DELETE [ simple_selection ( ',' simple_selection ) ]
                      FROM table_name
                      [ USING update_parameter ( AND update_parameter )* ]
                      WHERE where_clause
                      [ IF ( EXISTS | condition ( AND condition )*) ]

simple_selection ::=  column_name
                     | column_name '[' term ']'
                     | column_name '.' `field_name

condition        ::=  simple_selection operator term
```

Where:
+ `table_name` は削除する行が含まれているテーブルです。

**例**

```
DELETE manager_id FROM "myGSGKeyspace".employees_tbl WHERE id='789-01-2345' AND division='Executive' ;
```

`DELETE` は、以下の値を `update_parameter` のようにサポートします。
+ `TIMESTAMP` — 標準基準時間 epoch 1970 年 1 月 1 日 00:00:00 GMT からのマイクロ秒数を表す `bigint` 値。

# Amazon Keyspaces の組み込み関数
<a name="cql.functions"></a>

Amazon Keyspaces (Apache Cassandra 向け) では、Cassandra クエリ言語 (CQL) ステートメントで使用できるさまざまな組み込み関数がサポートされています。

**Topics**
+ [スカラー関数](#cql.functions.scalar)

## スカラー関数
<a name="cql.functions.scalar"></a>

*スカラー関数*は、1 つの値に対して計算を実行し、その結果を 1 つの値として返す関数です。Amazon Keyspaces では以下のスカラー関数がサポートされています。


****  

| 関数 | 説明 | 
| --- | --- | 
|  `blobAsType`  | 指定されたデータ型の値を返します。 | 
|  `cast`  | あるネイティブデータ型を別のネイティブデータ型に変換します。 | 
|  `currentDate`  | 現在の日時を日付として返します。 | 
|  `currentTime`  | 現在の日時を時刻として返します。 | 
|  `currentTimestamp`  | 現在の日時をタイムスタンプとして返します。 | 
|  `currentTimeUUID`  | 現在の日時を timeuuid として返します。 | 
|  `fromJson`  | JSON 文字列を選択した列のデータ型に変換します。 | 
|  `maxTimeuuid`  | タイムスタンプまたは日付文字列として可能な最大 timeuuid を返します。 | 
|  `minTimeuuid`  | タイムスタンプまたは日付文字列の最小 timeuuid を返します。 | 
|  `now`  | 新しい一意の timeuuid を返します。 | 
|  `toDate`  | timeuuid またはタイムスタンプのいずれかを日付型に変換します。 | 
|  `toJson`  | 選択した列の列値を JSON 形式で返します。 | 
|  `token`  | パーティションキーのハッシュ値を返します。 | 
|  `toTimestamp`  | timeuuid または日付のいずれかをタイムスタンプに変換します。 | 
|  `TTL`  | 列の有効期限を秒単位で返します。 | 
|  `typeAsBlob`  | 指定されたデータ型を blob に変換します。 | 
|  `toUnixTimestamp`  | timeuuid またはタイムスタンプのいずれかを bigInt に変換します。 | 
|  `uuid`  | ランダムバージョン 4 UUID を返します。 | 
|  `writetime`  | 指定した列の値のタイムスタンプを返します。 | 
|  `dateOf`  | (非推奨) timeuuid のタイムスタンプを抽出し、値を日付として返します。 | 
|  `unixTimestampOf`  | (非推奨) timeuuid のタイムスタンプを抽出し、値を生の 64 ビット整数タイムスタンプとして返します。 | 