Tipos de datos en Amazon Athena
Cuando ejecute CREATE TABLE, deberá especificar los nombres de las columnas y el tipo de datos que puede contener cada columna. Athena admite los tipos de datos que se indican a continuación. Para obtener información sobre las asignaciones de tipos de datos que el controlador JDBC admite entre Athena, JDBC y Java, consulte Tipos de datos
-
tinyint
: un número entero firmado de 8 bits en formato de complemento de dos, con un valor mínimo de -27 y un valor máximo de 27-1. -
smallint
: un número entero firmado de 16 bits en formato de complemento de dos, con un valor mínimo de -215 y un valor máximo de 215-1. -
int
yinteger
: Athena utiliza expresiones diferentes para números enteros según el tipo de consulta.-
int
: en las consultas de lenguaje de definición de datos (DDL), comoCREATE TABLE
, utilice el tipo de datosint
. -
integer
: en las consultas DML, comoSELECT * FROM
, utilice el tipo de datosinteger
.integer
se representa como un valor firmado de 32 bits en formato de complemento de dos, con un valor mínimo de -231 y un valor máximo de 231-1.-
Para garantizar la compatibilidad con las aplicaciones de análisis empresarial, el controlador JDBC devuelve el tipo
integer
.
-
-
-
bigint
: un número entero firmado de 64 bits en formato de complemento de dos, con un valor mínimo de -263 y un valor máximo de 263-1. -
double
: un número firmado de punto flotante de doble precisión de 64 bits. El rango es de 4.94065645841246544e-324d a 1.79769313486231570e+308d, positivo o negativo.double
sigue el estándar IEEE para la aritmética de punto flotante (IEEE 754). -
float
: un número firmado de punto flotante de precisión simple de 32 bits. El rango es de 1.40129846432481707e-45 a 3.40282346638528860e+38, positivo o negativo.float
sigue el estándar IEEE para la aritmética de punto flotante (IEEE 754). Equivalente areal
en Presto. En Athena, utilicefloat
en instrucciones DDL comoCREATE TABLE
yreal
en funciones SQL comoSELECT CAST
. El rastreador de AWS Glue devuelve valores enfloat
, y Athena traduce los tiposreal
yfloat
internamente (consulte las notas de la versión 5 de junio de 2018). -
decimal
(
:precision
,scale
)
es el número total de dígitos.precision
(opcional) es el número de dígitos de la parte fraccionaria con un valor predeterminado de 0. Por ejemplo, utilice estas definiciones de tipo:scale
decimal(11,5)
,decimal(15)
. El valor máximo paraprecision
(precisión) es 38 y el valor máximo parascale
(escala) también es 38.Para especificar valores decimales como literales como, por ejemplo, al seleccionar filas con un valor decimal específico en una expresión DDL de consulta, especifique la definición de tipo
decimal
y enumere el valor decimal como literal (entre comillas simples) en su consulta, como en este ejemplo:decimal_value = decimal '0.12'
. -
char
: datos de caracteres de longitud fija, con una longitud especificada comprendida entre 1 y 255 como, por ejemplo,char(10)
. Para obtener más información, consulte Tipo de datos Hive CHAR. nota Para utilizar la función
substr
para devolver una subcadena de longitud especificada desde un tipo de datoschar
, primero debe convertir el valor dechar
avarchar
, como en el ejemplo siguiente.substr(cast(col1 as varchar), 1, 4)
-
varchar
: datos de caracteres de longitud variable, con una longitud especificada comprendida entre 1 y 65 535 como, por ejemplo,varchar(10)
. Para obtener más información, consulte Tipo de datos Hive VARCHAR. -
string
: un literal de cadena entre comillas simples o dobles. Para obtener más información, consulte Tipo de datos STRING Hive. nota Los tipos de datos que no son de cadena no se pueden convertir en
string
en Athena; en su lugar, se pueden convertir envarchar
. -
date
: una fecha en formato ISO, como
. Por ejemplo,YYYY
-MM
-DD
date '2008-09-15'
. Una excepción es OpenCSVSerDe, que utiliza el número de días transcurridos desde el 1 de enero de 1970. Para obtener más información, consulte OpenCSVSerDe para el procesamiento de CSV. -
timestamp
: instante de fecha y hora en un formato compatible conjava.sql.Timestamp
hasta una resolución máxima de milisegundos, como
. Por ejemplo,yyyy
-MM
-dd
HH
:mm
:ss
[.f...
]timestamp '2008-09-15 03:04:05.324'
. Una excepción es OpenCSVSerDe, que utiliza datos detimestamp
en formato numérico UNIX (por ejemplo,1579059880000
). Para obtener más información, consulte OpenCSVSerDe para el procesamiento de CSV. -
array
<
: matriz del tipo de componente dado.data_type
>Ejemplo
CREATE TABLE table array_table (c1 array<integer>) LOCATION '...'; INSERT INTO array_table values(ARRAY[1,2,3]);
-
map
<
: asignación entre los tipos de componentes dados.primitive_type
,data_type
>Ejemplo
CREATE TABLE map_table(c1 map<string, integer>) LOCATION '...'; INSERT INTO map_table values(MAP(ARRAY['foo', 'bar'], ARRAY[1, 2]));
-
struct
<
: colección de elementos de distintos tipos de componentes.col_name
:data_type
[commentcol_comment
] ,...
>Ejemplo
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));