Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
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
-
boolean
: los valores sontrue
yfalse
. -
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 AWS Glue rastreador devuelve valores y Athenareal
traducefloat
y escribe internamente (consulte las notas de 5 de junio de 2018 la versión).float
-
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
. -
ipaddress
— Representa una dirección IP en las consultas de DML. No es compatible con DDL. Para obtener más información, consulte IPADDRESS. -
binary
: se utiliza para los datos de Parquet. -
date
: una fecha en formato ISO, como
. Por ejemplo,YYYY
-MM
-DD
date '2008-09-15'
. Una excepción es el SerDe OpenCSV, 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 el SerDeOpenCSV, quetimestamp
utiliza datos en formato numérico UNIX (por ejemplo,).1579059880000
Para obtener más información sobre cómo trabajar con marcas de tiempo, consulte Trabajo con datos de marca de tiempo más adelante en este documento.
-
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
,...
>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));
Trabajo con datos de marca de tiempo
En esta sección se describen algunas consideraciones para trabajar con datos de marcas de tiempo en Athena.
nota
El tratamiento de las marcas de tiempo ha cambiado un poco entre la versión 2 y 3 del motor de Athena. Para obtener información sobre los errores relacionados con la marca de tiempo que se pueden producir en la versión 3 del motor de Athena y las soluciones sugeridas, consulte Cambios en la marca de tiempo en la referencia de Versión 3 del motor Athena.
Formato para escribir datos de marcas de tiempo en objetos de Amazon S3
El formato en el que se deben escribir los datos de marcas de tiempo en los objetos de Amazon S3 depende tanto del tipo de datos de la columna como de la SerDebiblioteca que utilice.
-
Si cuenta con una columna de tabla de tipo
DATE
, Athena espera que la columna o propiedad correspondiente de los datos sea una cadena en el formato ISOYYYY-MM-DD
o un tipo de fecha integrado, como los de Parquet u ORC. -
Si cuenta con una columna de tabla de tipo
TIME
, Athena espera que la columna o propiedad correspondiente de los datos sea una cadena en el formato ISOHH:MM:SS
o un tipo de hora integrado, como los de Parquet u ORC. -
Si cuenta con una columna de tabla de tipo
TIMESTAMP
, Athena espera que la columna o propiedad correspondiente de los datos sea una cadena en el formatoYYYY-MM-DD HH:MM:SS.SSS
(tenga en cuenta el espacio entre la fecha y la hora) o un tipo de hora integrado, como los de Parquet, ORC o Ion.nota
Las marcas de tiempo de SerDe OpenCSV son una excepción y deben codificarse como épocas UNIX con una resolución de milisegundos.
Cómo garantizar que los datos particionados en el tiempo coincidan con el campo de marca de tiempo de un registro
El productor de los datos debe asegurarse de que los valores de la partición se alineen con los datos de la partición. Por ejemplo, si sus datos tienen una timestamp
propiedad y utiliza Firehose para cargar los datos en Amazon S3, debe utilizar la partición dinámica, ya que la partición predeterminada de Firehose es. wall-clock-based
Uso de una cadena como tipo de datos para las claves de partición
Por motivos de rendimiento, es preferible utilizar STRING
como el tipo de datos para las claves de partición. Si bien Athena reconoce los valores de partición en el formato YYYY-MM-DD
como fechas al utilizar el tipo DATE
, esto puede provocar un rendimiento deficiente. Por este motivo, en su lugar le recomendamos que utilice el tipo de datos STRING
para las claves de partición.
Cómo escribir consultas para campos de marca de tiempo que también se encuentren particionados por tiempo
La forma en que se escriben las consultas para los campos de marca de tiempo que se encuentran particionados por tiempo dependen del tipo de tabla que se desee consultar.
Tablas de Hive
Con las tablas de Hive más utilizadas en Athena, el motor de consultas no conoce las relaciones entre las columnas y las claves de partición. Por este motivo, siempre debe agregar predicados en las consultas tanto para la columna como para la clave de partición.
Por ejemplo, supongamos que tiene una columna event_time
y una clave de partición event_date
y desea consultar eventos entre las 23:00 y las 03:00. En este caso, debe incluir predicados en la consulta tanto para la columna como para la clave de partición, como en el siguiente ejemplo.
WHERE event_time BETWEEN
start_time
ANDend_time
AND event_date BETWEENstart_time_date
ANDend_time_date
Tablas de Iceberg
Con las tablas de Iceberg, puede utilizar valores de partición calculados, lo que simplifica las consultas. Por ejemplo, supongamos que la tabla de Iceberg se creó con una cláusula PARTITIONED BY
como la siguiente:
PARTITIONED BY (event_date month(event_time))
En este caso, el motor de consultas reduce de forma automática las particiones en función de los valores de los predicados event_time
. Por este motivo, la consulta solo necesita especificar un predicado para event_time
, como en el siguiente ejemplo.
WHERE event_time BETWEEN
start_time
ANDend_time
Para obtener más información, consulte Creación de tablas de Iceberg.