Ir para o conteúdo

Como resolver exceções de carimbo de data/hora ao consultar uma tabela no Athena?

3 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, a consulta pode falhar com uma das seguintes exceções:

  • "TYPE_MISMATCH: line 1:49: Cannot apply operator: timestamp(3) < varchar(19)": se você usar um operador lógico, como '<', entre os valores TIMESTAMP e STRING em sua consulta, talvez receba essa exceção.
  • "cast(col as timestamp) with INVALID_CAST_ARGUMENT": se você usar CAST em uma coluna com um tipo de dados que o Athena não suporta, talvez receba essa exceção.

Resolução

Erros de sintaxe com operadores lógicos

Se sua consulta usar um operador lógico para comparar valores de timestamp, você poderá receber um erro de exceção.

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 Trino para converter STRING em TIMESTAMP na condição de filtro de consulta, ou use CAST para converter STRING em TIMESTAMP. Para mais informações, consulte Date and time functions and operators (Funções e operadores de data e hora) no site da Trino.

Conclua as etapas a seguir:

  1. Crie uma tabela com dados de carimbo de data/hora no formato STRING, semelhante ao exemplo a seguir:
    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)
    Observação: substitua testdataset1, testid1, testname1 e testtimestamp1 por seus valores.
  2. Use a função CAST no valor STRING para aplicar o filtro de carimbo de data/hora:
    SELECT * FROM testdataset1 WHERE testtimestamp1 < CAST('2020-07-14 00:00:00' AS timestamp)
    Observação: substitua testdataset1 e testtimestamp1 por seus valores.

Erros de argumento inválido com CAST

Se você usar CAST para converter uma coluna no tipo de dados TIMESTAMP, poderá receber um erro de exceção.

O tipo de dados da coluna que você deseja converter para TIMESTAMP pode ser um tipo que o Athena não suporta. Use as funções de data e hora do Trino para ler a coluna como DATE ou TIMESTAMP em sua consulta. Para mais informações, consulte Date and time functions and operators (Funções e operadores de data e hora) no site da Trino.

Conclua as etapas a seguir:

  1. Crie uma tabela semelhante ao exemplo a seguir:
    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)
    Observação: substitua testdataset2, testid2, testname2 e testtimestamp2 por seus valores.
  2. Use a função do Trino date_parse para converter sua tabela para o formato TIMESTAMP Java:
    SELECT testid2, testname2, date_parse(testtimestamp2, '%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2
    Observação: substitua testdataset2, testid2, testname2 e testtimestamp2 por seus valores.

Informações relacionadas

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

AWS OFICIALAtualizada há 7 meses