

# 数据类型
<a name="s3-select-sql-reference-data-types"></a>

**重要**  
不再向新客户提供 Amazon S3 Select。Amazon S3 Select 的现有客户可以像往常一样继续使用该功能。[了解详情](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select 支持多个基元数据类型。

## 数据类型转换
<a name="s3-select-sql-reference-data-conversion"></a>

一般规则是遵循 `CAST` 函数（如果已定义）。如果未定义 `CAST`，则将所有输入数据视为字符串。在这种情况下，必要时，您必须将输入数据强制转换为相关的数据类型。

有关 `CAST` 函数的更多信息，请参阅[CAST](s3-select-sql-reference-conversion.md#s3-select-sql-reference-cast)。

## 支持的数据类型
<a name="s3-select-sql-reference-supported-data-types"></a>

Amazon S3 Select 支持以下这组基元数据类型。


|  名称  |  说明  |  示例  | 
| --- | --- | --- | 
| `bool` | 一个布尔值，可以是 `TRUE` 或 `FALSE`。 | `FALSE` | 
| `int`, `integer` | 范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 的 8 字节有符号整数。 | `100000` | 
| `string` | UTF8 编码的长度可变的字符串。原定设置限制为 1 个字符。最大字符限制为 2,147,483,647。 | `'xyz'` | 
| `float` | 8 字节浮点数。 | `CAST(0.456 AS FLOAT)` | 
| `decimal`, `numeric` |  Base-10 数字，最大精度为 38（即最大有效位数)，取值范围在 -231 到 231-1 之间（即以 10 为底的指数)。  如果您同时提供数值范围和精度，则 Amazon S3 Select 会全部忽略。   | `123.456 ` | 
| `timestamp` |  时间戳表示特定的时刻，始终包括本地偏移，并且能够支持任意精度。 在文本格式中，时间戳遵循[关于日期和时间格式的 W3C 注释](https://www.w3.org/TR/NOTE-datetime)，但它们必须以文本 `T` 结尾（如果时间戳不是最低限度全天精度）。允许使用小数秒，具有至少一位精度，以及无限的最大值。本地时间偏移可以表示为与 UTC 相比的小时:分钟偏移量，或表示为文本 `Z` 以指示 UTC 的本地时间。本地时间偏移对于具有时间的时间戳是必需的，但对于日期值是不允许的。  | `CAST('2007-04-05T14:30Z' AS TIMESTAMP)` | 

### 支持的 Parquet 类型
<a name="s3-select-sql-reference-supported-data-types-parquet"></a>

Amazon S3 Select 支持以下 Parquet 类型。
+ `DATE`
+ `DECIMAL`
+ `ENUM`
+ `INT(8)`
+ `INT(16)`
+ `INT(32)`
+ `INT(64)`
+ `LIST`
**注意**  
对于 `LIST` Parquet 类型输出，Amazon S3 Select 仅支持 JSON 格式。但是，如果查询将数据限定为简单值，还可以用 CSV 格式查询 `LIST` Parquet 类型。
+ `STRING`
+ `TIMESTAMP` 支持的精度（`MILLIS`/`MICROS`/`NANOS`)
**注意**  
不支持保存为 `INT(96)` 的时间戳。  
由于 `INT(64)` 类型的范围，使用 `NANOS` 单位的时间戳只能表示介于 `1677-09-21 00:12:43` 和 `2262-04-11 23:47:16` 之间的值。超出此范围的值不能用 `NANOS` 单位表示。

### 将 Parquet 类型映射到 Amazon S3 Select 中支持的数据类型
<a name="s3-select-sql-reference-supported-data-types-parquet-mapping"></a>


| Parquet 类型 | 支持的数据类型 | 
| --- | --- | 
| `DATE` |  `timestamp`  | 
|  `DECIMAL`  |  `decimal`, `numeric`  | 
|  `ENUM`  |  `string`  | 
|  `INT(8)`  |  `int`, `integer`  | 
|  `INT(16)`  | `int`, `integer` | 
| `INT(32)` | `int`, `integer` | 
|  `INT(64)`  |  `decimal`, `numeric`  | 
|  `LIST`  |  列表中的每个 Parquet 类型都映射到相应的数据类型。  | 
|  `STRING`  |  `string`  | 
|  `TIMESTAMP`  |  `timestamp`  | 