Como posso resolver exceções de timestamp ao consultar uma tabela no Amazon Athena?

2 minuto de leitura
0

Quando eu consulto uma coluna de dados TIMESTAMP na minha tabela do Amazon Athena, recebo uma exceção.

Breve descrição

Quando você consulta uma tabela do Athena com dados TIMESTAMP, sua consulta pode falhar com uma das seguintes exceções:

  • SYNTAX_ERROR: linha '>' não pode ser aplicada a timestamp, varchar(19): você pode obter essa exceção se usou um operador lógico, como '>', entre os valores TIMESTAMP e STRING em sua consulta.
  • cast(col as timestamp) com INVALID_CAST_ARGUMENT: você pode obter essa exceção se usa a transmissão em uma coluna com o tipo de dados sem suporte pelo Athena.

Resolução

Exceção: SYNTAX_ERROR: linha '>' não pode ser aplicada a timestamp, varchar(19)

Os dados TIMESTAMP em sua tabela podem estar no formato errado. O Athena requer o formato TIMESTAMP Java. Use a função de data e hora ou transmissão do Presto para converter STRING em TIMESTAMP na condição do filtro de consulta. Para mais informações, consulte Date and time functions and operators (Funções e operadores de data e hora) na documentação do Presto.

1.    Crie uma tabela testdataset1 executando uma consulta semelhante à seguinte:

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.    Aplique o filtro de timestamp usando a função cast no valor literal (exemplo: 2020-07-14 00:00:00):

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

Exceção: cast(col as timestamp) com INVALID_CAST_ARGUMENT

Use as funções de data e hora do Presto para ler a coluna como DATE ou TIMESTAMP em sua consulta.

1.    Crie uma tabela testdataset2 executando uma consulta semelhante à seguinte:

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.    Converta a coluna STRING TIMESTAMP testtimestamp2 para o formato TIMESTAMP Java usando a função date_parse do Presto:

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

Informações relacionadas

Por que TIMESTAMP dá um resultado vazio quando eu consulto uma tabela no Amazon Athena?

AWS OFICIAL
AWS OFICIALAtualizada há 4 anos