¿Cómo resuelvo las excepciones de marca de tiempo cuando consulto una tabla en Amazon Athena?

2 minutos de lectura
0

Cuando consulto una columna de datos TIMESTAMP en mi tabla de Amazon Athena, aparece una excepción.

Descripción breve

Al consultar una tabla de Athena con datos TIMESTAMP, es posible que la consulta falle con alguna de las siguientes excepciones:

  • **SYNTAX_ERROR: la línea «>» no se puede aplicar a la marca de tiempo, varchar(19):**puede que aparezca esta excepción al usar un operador lógico, como «>», entre los valores TIMESTAMP y STRING en la consulta.
  • **cast(col como marca de tiempo) con INVALID_CAST_ARGUMENT:**es posible que aparezca esta excepción al usar la conversión en una columna con un tipo de datos que no admita Athena.

Solución

Excepción: SYNTAX_ERROR: la línea «>» no se puede aplicar a la marca de tiempo, varchar(19)

Es posible que los datos TIMESTAMP de la tabla tengan un formato incorrecto. Athena requiere el formato TIMESTAMP de Java. Use la función de fecha y hora o la conversión de Presto para convertir STRING a TIMESTAMP en la condición de filtro de consulta. Para obtener más información, consulte Funciones y operadores de fecha y hora en la documentación de Presto.

1.    Ejecute una consulta similar a la siguiente para crear una tabla testdataset1:

CREATE TABLE testdataset1 AS SELECT testid1, testname1, date_parse(testtimestamp1,'%m/%d/%Y %h:%i:%s %p') AS testtimestamp1
FROM (
    VALUES
        (1, 'a','7/14/2020 8:22:39 AM'),
        (2, 'b','8/01/2015 10:22:39 PM'),
        (3, 'c','8/13/2017 4:22:39 AM')
) AS t(testid1, testname1, testtimestamp1)

2.    Use la función de conversión en el valor literal para aplicar el filtro de marca de tiempo (ejemplo: 2020-07-14 00:00:00):

SELECT * FROM testdataset WHERE testtimestamp1 < cast('2020-07-14 00:00:00' as timestamp)

Excepción: cast(col como marca de tiempo) con INVALID_CAST_ARGUMENT

Use las funciones de fecha y hora de Presto para leer la columna como DATE o TIMESTAMP en su consulta.

1.    Ejecute una consulta similar a la siguiente para crear una tabla testdataset2:

CREATE TABLE testdataset2 AS SELECT * FROM
(VALUES
        (1, 'a','7/14/2020 8:22:39 AM'),
        (2, 'b','8/01/2015 10:22:39 PM'),
        (3, 'c','8/13/2017 4:22:39 AM')
) AS t(testid2, testname2, testtimestamp2)

2.    Use la función date_parse de Presto para convertir la columna STRING TIMESTAMP testtimestamp2 al formato JAVA TIMESTAMP:

SELECT testid2,testname2,date_parse(testtimestamp2,'%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2

Información relacionada

¿Por qué el resultado TIMESTAMP está vacío cuando consulto una tabla en Amazon Athena?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años