Come faccio a risolvere le eccezioni relative al timestamp quando interrogo una tabella in Amazon Athena?

2 minuti di lettura
0

Visualizzo un'eccezione quando eseguo una query su una colonna di dati TIMESTAMP nella mia tabella Amazon Athena.

Breve descrizione

Quando esegui una query su una tabella Athena con dati TIMESTAMP, la query potrebbe non riuscire con una delle seguenti eccezioni:

  • SYNTAX_ERROR: la riga '>' non può essere applicata al timestamp, varchar(19): è possibile visualizzare questa eccezione se si utilizza un operatore logico, ad esempio '>', tra i valori TIMESTAMP e STRING nella query.
  • cast(col come timestamp) con INVALID_CAST_ARGUMENT: potresti visualizzare questa eccezione se utilizzi il casting su una colonna con il tipo di dati non supportato da Athena.

Risoluzione

Eccezione: SYNTAX_ERROR: la riga '>' non può essere applicata al timestamp, varchar(19)

I dati TIMESTAMP nella tabella potrebbero essere nel formato errato. Athena richiede il formato Java TIMESTAMP. Usa la funzione data e ora di Presto o il casting per convertire STRING in TIMESTAMP nella condizione del filtro di query. Per ulteriori informazioni, vedi Funzioni e operatori di data e ora nella documentazione di Presto.

1.    Crea una tabella testdataset1 eseguendo una query simile alla seguente:

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.    Applica il filtro timestamp utilizzando la funzione cast sul valore letterale (esempio: 2020-07-14 00:00:00):

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

Eccezione: cast (col come timestamp) con INVALID_CAST_ARGUMENT

Usa le funzioni di data e ora di Presto per leggere la colonna come DATE o TIMESTAMP nella tua query.

1.    Crea una tabella testdataset2 eseguendo una query simile alla seguente:

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.    Converti la colonna STRING TIMESTAMP testtimestamp2 in formato JAVA TIMESTAMP utilizzando la funzione date_parse di Presto:

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

Informazioni correlate

Perché il risultato TIMESTAMP è vuoto quando eseguo una query su una tabella in Amazon Athena?

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa