

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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>


****  

| 資料類型 | Description | 
| --- | --- | 
|  `ascii`  | 代表 ASCII 字元字串。 | 
|  `text`  | 代表 UTF-8 編碼字串。 | 
|  `varchar`  |  代表 UTF-8 編碼字串 (`varchar` 是 的別名`text`)。  | 

### 數值類型
<a name="cql.data-types.numeric"></a>


****  

| 資料類型 | Description | 
| --- | --- | 
|  `bigint`  | 代表 64 位元簽署長。 | 
|  `counter`  | 代表 64 位元帶正負號的整數計數器。如需詳細資訊，請參閱[計數器](#cql.data-types.numeric.counters)。 | 
|  `decimal`  | 代表變數精確度小數位數。 | 
|  `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`，該資料表中的所有資料欄都必須是 類型`counter`。

如果計數器更新失敗 （例如，由於逾時或失去與 Amazon Keyspaces 的連線），用戶端不知道計數器值是否已更新。如果重試更新，對計數器值的更新可能會再次套用。

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


****  

| 資料類型 | Description | 
| --- | --- | 
|  `blob`  | 代表任意位元組。 | 

### 布林值 (Boolean) 類型
<a name="cql.data-types.boolean"></a>


****  

| 資料類型 | Description | 
| --- | --- | 
|  `boolean`  | 代表 true或 false。 | 

### 時間相關類型
<a name="cql.data-types.time"></a>


****  

| 資料類型 | Description | 
| --- | --- | 
|  `date`  | 格式為 的字串<yyyy>-<mm>-<dd>。 | 
|  `timestamp`  | 64 位元帶正負號整數，代表自 epoch 起的日期和時間 (1970 年 1 月 1 日，格林威治標準時間 00：00：00)，以毫秒為單位。 | 
|  `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>


****  

| 資料類型 | Description | 
| --- | --- | 
|  `list`  | 代表常值元素的排序集合。 | 
|  `map`  | 代表索引鍵/值對的未排序集合。 | 
|  `set`  | 代表一或多個常值元素的未排序集合。 | 

您可以在角括號中使用集合類型後接另一個資料類型 （例如， `TEXT`或 `INT`) 來宣告集合資料欄。您可以使用 `SET`的 建立資料欄`TEXT`，也可以建立 `MAP` `TEXT`和 `INT`鍵值對的 ，如下列範例所示。

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

*非凍結*集合可讓您更新每個個別集合元素。儲存個別元素的用戶端時間戳記和存留時間 (TTL) 設定。

當您在集合類型上使用 `FROZEN`關鍵字時，集合的值會序列化為單一不可變的值，Amazon Keyspaces 會將它們視為 `BLOB`。這是*凍結*集合。`INSERT` 或 `UPDATE`陳述式會覆寫整個凍結集合。您無法更新凍結集合中的個別元素。

用戶端時間戳記和存留時間 (TTL) 設定會套用至整個凍結集合，而不是個別元素。`Frozen`集合資料欄可以是資料表`PRIMARY KEY`的一部分。

您可以巢狀凍結集合。例如，`SET`如果 `MAP` 使用 `FROZEN`關鍵字，您可以在 `MAP`中定義 ，如下列範例所示。

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

Amazon Keyspaces 預設支援最多 8 個層級的凍結集合巢狀化。如需詳細資訊，請參閱[Amazon Keyspaces 服務配額](quotas.md#table)。如需 Apache Cassandra 功能差異的詳細資訊，請參閱 [`FROZEN` 集合](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>


****  

| 資料類型 | Description | 
| --- | --- | 
|  `inet`  | 代表 IP 地址的字串，採用 IPv4 或 IPv6 格式。 | 

### 靜態
<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)。您可以使用任何有效的 Amazon Keyspaces 資料類型來建立 UDT，包括集合和其他現有的 UDTs。您可以在金鑰空間中建立 UDTs，並使用它們來定義金鑰空間中任何資料表中的資料欄。

如需 CQL 語法的詳細資訊，請參閱 [使用者定義的類型 (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 提供與 Apache Cassandra 相同的 JSON 資料類型映射。下表說明 Amazon Keyspaces 在`INSERT JSON`陳述式中接受的資料類型，以及 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`後面接著偶數的十六進位數字。 | 
|  `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 位元整數。 | 