Salta al contenuto

Come posso risolvere le eccezioni relative al timestamp quando eseguo una query su una tabella in Athena?

3 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 in Athena con dati TIMESTAMP, la query potrebbe non riuscire con una delle seguenti eccezioni:

  • "TYPE_MISMATCH: line 1:49: Cannot apply operator: timestamp(3) < varchar(19)": Se utilizzi un operatore logico, ad esempio "<", tra i valori TIMESTAMP e STRING nella query, potresti ricevere questa eccezione.
  • "cast(col as timestamp) with INVALID_CAST_ARGUMENT": Se utilizzi CAST su una colonna con un tipo di dati non supportato da Athena, potresti ricevere questa eccezione.

Risoluzione

Errori di sintassi con operatori logici

Se la query utilizza un operatore logico per confrontare i valori del timestamp, potresti ricevere un errore di eccezione.

I dati TIMESTAMP nella tabella potrebbero essere nel formato errato. Athena richiede il formato Java TIMESTAMP. Utilizza la funzione data e ora di Trino per convertire STRING in TIMESTAMP nella condizione del filtro della query o utilizza CAST per convertire STRING in TIMESTAMP. Per ulteriori informazioni, consulta Date and time functions and operators (Operatori e funzioni data e ora) sul sito web Trino.

Completa i seguenti passaggi:

  1. Crea una tabella con dati di timestamp in formato STRING, simile a questo esempio:
    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)
    Nota: sostituisci testdataset1, testid1, testname1 e testtimestamp1 con i tuoi valori.
  2. Utilizza la funzione CAST sul valore STRING per applicare il filtro timestamp:
    SELECT * FROM testdataset1 WHERE testtimestamp1 < CAST('2020-07-14 00:00:00' AS timestamp)
    Nota: sostituisci testdataset1 e testtimestamp1 con i tuoi valori.

Errori di argomento non validi con CAST

Se utilizzi CAST per convertire una colonna nel tipo di dati TIMESTAMP, potresti ricevere un errore di eccezione.

Il tipo di dati della colonna che desideri trasmettere a TIMESTAMP potrebbe essere un tipo non supportato da Athena. Utilizza le funzioni di data e ora di Trino per leggere la colonna come DATE o TIMESTAMP nella query. Per ulteriori informazioni, consulta Date and time functions and operators (Operatori e funzioni data e ora) sul sito web Trino.

Completa i seguenti passaggi:

  1. Crea una tabella simile a questo esempio:
    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)
    Nota: sostituisci testdataset2, testid2, testname2 e testtimestamp2 con i tuoi valori.
  2. Utilizza la funzione date_parse di Trino per convertire la tabella nel formato TIMESTAMP Java:
    SELECT testid2, testname2, date_parse(testtimestamp2, '%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2
    Nota: sostituisci testdataset2, testid2, testname2 e testtimestamp2 con i tuoi valori.

Informazioni correlate

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

AWS UFFICIALEAggiornata 8 mesi fa