Amazon Athena 中的数据类型
运行 CREATE TABLE 时,您可以指定列名和每列可以包含的数据类型。Athena 支持下面列出的数据类型。有关 JDBC 驱动程序在 Athena、JDBC 和 Java 之间支持的数据类型映射的信息,请参阅《JDBC 驱动程序安装和配置指南》中的数据类型
-
tinyint– 一个 8 位有符号的整数,采用二进制补码格式,最小值为 -27,最大值为 27-1。 -
smallint– 一个 16 位有符号的整数,采用二进制补码格式,最小值为 -215,最大值为 215-1。 -
int和integer– Athena 根据查询类型使用不同的整数表达式。-
int– 在数据定义语言 (DDL) 查询(如CREATE TABLE)中,使用int数据类型。 -
integer– 在 DML 查询(如SELECT * FROM)中,使用integer数据类型。integer以二进制补码格式表示为 32 位有符号值,最小值为 -231,最大值为 231-1。-
为确保与业务分析应用程序兼容,JDBC 驱动程序返回
integer类型。
-
-
-
bigint– 一个 64 位有符号的整数,采用二进制补码格式,最小值为 -263,最大值为 263-1。 -
double– 64 位有符号的双精度浮点数。范围为 4.94065645841246544e-324d 至 1.79769313486231570e+308d,正或负。double遵循 IEEE 浮点算法标准 (IEEE 754)。 -
float– 32 位有符号的单精度浮点数。范围为 1.40129846432481707e-45 至 3.40282346638528860e+38,正或负。float遵循 IEEE 浮点算法标准 (IEEE 754)。相当于 Presto 中的real。在 Athena 中,在CREATE TABLE等 DDL 语句中使用float,在SELECT CAST等 SQL 函数中使用real。Amazon Glue 爬网程序以float返回值, Athena 将内部翻译real和float类型(请参阅 2018 年 6 月 5 日 发布说明)。 -
decimal(–precision,scale)是总位数,而precision(可选)是小数部分的位数,默认值为 0。例如,使用以下类型定义:scaledecimal(11,5)、decimal(15)。最大精度值为 38,最大标度值为 38。要将十进制值指定为文字(例如在查询 DDL 表达式中选择具有特定十进制值的行时),请指定
decimal类型定义,并在查询中将十进制值列为文字(带单引号),如下例所示:decimal_value = decimal '0.12'。 -
char– 固定长度字符数据,具有介于 1 和 255 之间的指定长度,例如char(10)。有关更多信息,请参阅 CHAR Hive 数据类型。 注意 要使用
substr函数从char数据类型返回指定长度的子字符串,您必须先将char值转换为varchar,如以下示例所示。substr(cast(col1 as varchar), 1, 4) -
varchar– 可变长度字符数据,具有介于 1 和 65535 之间的指定长度,例如varchar(10)。有关更多信息,请参阅 VARCHAR Hive 数据类型。 -
string– 用单引号或双引号括起的字符串文本。有关更多信息,请参阅 STRING Hive 数据类型。 注意 在 Athena 中,无法将非字符串数据类型强制转换为
string;而是将这些数据类型强制转换为varchar。 -
date– ISO 格式的日期,例如。例如:YYYY-MM-DDdate '2008-09-15'。OpenCSVSerDe 是一个例外,它使用自 1970 年 1 月 1 日以来经过的天数。有关更多信息,请参阅用于处理 CSV 的 OpenCSVSerDe。 -
timestamp– 使用java.sql.Timestamp兼容格式的瞬间日期和时间最多可达毫秒级的最大分辨率,例如 。例如:yyyy-MM-ddHH:mm:ss[.f...]timestamp '2008-09-15 03:04:05.324'。OpenCSVSerDe 是一个例外,它使用UNIX 数字格式的timestamp数据(例如1579059880000)。有关更多信息,请参阅用于处理 CSV 的 OpenCSVSerDe。 -
array<– 给定组件类型的数组。data_type>示例
CREATE TABLE table array_table (c1 array<integer>) LOCATION '...'; INSERT INTO array_table values(ARRAY[1,2,3]); -
map<– 给定组件类型之间的映射。primitive_type,data_type>示例
CREATE TABLE map_table(c1 map<string, integer>) LOCATION '...'; INSERT INTO map_table values(MAP(ARRAY['foo', 'bar'], ARRAY[1, 2])); -
struct<– 不同组件类型的元素集合。col_name:data_type[commentcol_comment] ,...>示例
CREATE TABLE struct_table(c1 struct<name:varchar(10), age:integer>) LOCATION '...'; INSERT INTO struct_table SELECT CAST(ROW('Bob', 38) AS ROW(name VARCHAR(10), age INTEGER));