Tipos de datos en Amazon Athena - Amazon Athena

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 en la Guía de instalación y configuración del controlador JDBC. Para obtener información sobre las asignaciones de tipos de datos que el controlador ODBC admite entre Athena y SQL, consulte Tipos de datos en la Guía de instalación y configuración del controlador ODBC.

  • boolean: los valores son true y false.

  • 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 y integer: 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), como CREATE TABLE, utilice el tipo de datos int.

    • integer: en las consultas DML, como SELECT * FROM, utilice el tipo de datos integer. 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 a real en Presto. En Athena, utilice float en instrucciones DDL como CREATE TABLE y real en funciones SQL como SELECT CAST. El AWS Glue rastreador devuelve valores y Athena real traduce float y escribe internamente (consulte las notas de 5 de junio de 2018 la versión). float

  • decimal(precision, scale): precision es el número total de dígitos. scale (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: decimal(11,5), decimal(15). El valor máximo para precision (precisión) es 38 y el valor máximo para scale (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 datos char, primero debe convertir el valor de char a varchar, 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 en varchar.

  • 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 YYYY-MM-DD. Por ejemplo, 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 con java.sql.Timestamp hasta una resolución máxima de milisegundos, como yyyy-MM-dd HH:mm:ss[.f...]. Por ejemplo, timestamp '2008-09-15 03:04:05.324'. Una excepción es el SerDeOpenCSV, que timestamp 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<data_type>: matriz del tipo de componente dado.

    Ejemplo

    CREATE TABLE table array_table (c1 array<integer>) LOCATION '...'; INSERT INTO array_table values(ARRAY[1,2,3]);
  • map<primitive_type, data_type>: asignación entre los tipos de componentes dados.

    Ejemplo

    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, ...>: colección de elementos de distintos tipos de componentes.

    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 ISO YYYY-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 ISO HH: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 formato YYYY-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 AND end_time AND event_date BETWEEN start_time_date AND end_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 AND end_time

Para obtener más información, consulte Creación de tablas de Iceberg.