Come faccio a risolvere l'errore "GENERIC_INTERNAL_ERROR" quando eseguo una query su una tabella in Amazon Athena?

8 minuti di lettura
0

Quando eseguo una query sulla mia tabella Amazon Athena, visualizzo l'errore "GENERIC_INTERNAL_ERROR".

Breve descrizione

I diversi tipi di eccezioni GENERIC_INTERNAL_ERROR e le relative cause sono le seguenti:

  • GENERIC_INTERNAL_ERROR: null: Potresti visualizzare questa eccezione in una delle seguenti condizioni:
  • Lo schema non corrisponde tra il tipo di dati di una colonna nella definizione della tabella e il tipo di dati effettivo del set di dati.
  • Stai eseguendo una query CREATE TABLE AS SELECT (CTAS) con una sintassi imprecisa.
  • GENERIC_INTERNAL_ERROR: il generatore principale è nullo: potresti visualizzare questa eccezione quando esegui una query su una tabella con colonne di tipo di dati array e il formato SerDe OpenCSVSerDe. Il formato OpenCSVSerde non supporta il tipo di dati dell'array.
  • GENERIC_INTERNAL_ERROR: Il valore supera MAX_INT: potresti visualizzare questa eccezione quando la colonna dei dati di origine è definita con il tipo di dati INT e ha un valore numerico maggiore di 2.147.483.647.
  • GENERIC_INTERNAL_ERROR: Il valore supera MAX_BYTE: potresti visualizzare questa eccezione quando la colonna dei dati di origine ha un valore numerico superiore alla dimensione consentita per il tipo di dati BYTE. Il tipo di dati BYTE è equivalente a TINYINT. TINYINT è un NUMERO INTERO con segno a 8 bit in formato complementare a due con un valore minimo di -128 e un valore massimo di 127.
  • GENERIC_INTERNAL_ERROR: Il numero di valori della partizione non corrisponde al numero di filtri: potresti visualizzare questa eccezione se hai partizioni incoerenti sui dati di Amazon Simple Storage Service (Amazon S3). Potresti avere partizioni incoerenti in una delle seguenti condizioni:
  • Le partizioni su Amazon S3 sono state modificate (esempio: nuove partizioni aggiunte).
  • Il numero di colonne delle partizioni nella tabella non corrisponde a quello dei metadati della partizione.
  • GENERIC_INTERNAL_ERROR: Voci multiple con la stessa chiave: potresti visualizzare questa eccezione dovuta alle chiavi (colonne) nei dati JSON quando:
  • Lo stesso nome viene utilizzato due volte.
  • Lo stesso nome viene utilizzato quando viene convertito in lettere minuscole.

Risoluzione

GENERIC_INTERNAL_ERROR:null

Mancata corrispondenza tra i tipi di dati della colonna: assicurati che il tipo di dati della colonna nella definizione della tabella sia compatibile con il tipo di dati di colonna nei dati di origine. Athena utilizza la tecnologia schema-on-read. Ciò significa che le definizioni delle tabelle vengono applicate ai dati in Amazon S3 durante l'elaborazione delle query.

Ad esempio, quando una tabella creata su Parquet archivia:

  • Athena legge lo schema dai file
  • Quindi, Athena convalida lo schema rispetto alla definizione della tabella in cui viene interrogato il file Parquet.

Se il tipo di dati sottostante di una colonna non corrisponde al tipo di dati indicato durante la definizione della tabella, viene visualizzato l'errore di mancata corrispondenza del tipo di dati della colonna.

Per risolvere questo problema, verifica che i file dei dati di origine non siano danneggiati. Se c'è una mancata corrispondenza dello schema tra i file dei dati di origine e la definizione della tabella, effettua una delle seguenti operazioni:

  • Aggiorna lo schema utilizzando il Catalogo dati AWS Glue.
  • Crea una nuova tabella utilizzando la definizione aggiornata della tabella.

Se i file dei dati di origine sono danneggiati, eliminali e quindi esegui una query sulla tabella.

Sintassi imprecisa: potresti visualizzato l'errore "GENERIC INTERNAL ERROR:null" quando entrambe le seguenti condizioni sono vere:

Per evitare questo errore, è necessario utilizzare nomi di colonna diversi per le proprietà partitioned_by e bucketed_by quando si utilizza la query CTAS. Per risolvere questo errore, crea una nuova tabella scegliendo nomi di colonna diversi per le proprietà partitioned_by e bucketed_by.

GENERIC_INTERNAL_ERROR: il generatore principale è nullo

Per risolvere questo errore, trova la colonna con l'array dei tipi di dati, quindi modifica il tipo di dati di questa colonna in stringa. Per modificare il tipo di dati della colonna in stringa, effettua una delle seguenti operazioni:

  • Aggiorna lo schema in Catalogo dati.
  • Crea una nuova tabella scegliendo il tipo di dati della colonna come stringa.

Esegui il comando SHOW CREATE TABLE per generare la query che ha creato la tabella. Quindi visualizza il tipo di dati della colonna per tutte le colonne dall'output di questo comando. Trova la colonna con l'array dei tipi di dati, quindi modifica il tipo di dati di questa colonna in stringa.

Per aggiornare lo schema della tabella con Catalogo dati, procedi come segue:

  1. Apri la console AWS Glue.
  2. Nel pannello di navigazione, scegli Tabelle.
  3. Seleziona la tabella che desideri aggiornare.
  4. Scegli Azione, quindi scegli Visualizza dettagli.
  5. Scegli Modifica schema.
  6. Scorri fino alla colonna con l'array dei tipi di dati, quindi scegli array.
  7. Per Tipo di colonna, seleziona stringa dal menu a tendina.
  8. Scegli Aggiorna.
  9. Nella pagina Modifica schema, scegli Salva.

GENERIC_INTERNAL_ERROR: Value exceeds MAX_INT

Per risolvere questo errore, trova la colonna con il tipo di dati int, quindi aggiorna il tipo di dati di questa colonna da int a bigint. Per modificare il tipo di dati della colonna, aggiorna lo schema nel Catalogo dati o crea una nuova tabella con lo schema aggiornato.

Esegui il comando SHOW CREATE TABLE per generare la query che ha creato la tabella. Quindi visualizza il tipo di dati della colonna per tutte le colonne dall'output di questo comando. Trova la colonna con il tipo di dati int, quindi modifica il tipo di dati di questa colonna in bigint.

Per aggiornare lo schema della tabella con Catalogo dati, procedi come segue:

  1. Apri la console AWS Glue.
  2. Nel pannello di navigazione, scegli Tabelle.
  3. Seleziona la tabella che desideri aggiornare.
  4. Scegli Azione, quindi scegli Visualizza dettagli.
  5. Scegli Modifica schema.
  6. Scorri fino alla colonna con il tipo di dati int, quindi scegli int.
  7. Per Tipo di colonna, seleziona bigint dal menu a tendina.
  8. Scegli Aggiorna.
  9. Nella pagina Modifica schema, scegli Salva.

GENERIC_INTERNAL_ERROR: Value exceeds MAX_BYTE

Per risolvere questo errore, trova la colonna con il tipo di dati tinyint. Quindi, modifica il tipo di dati di questa colonna in smallint, int o bigint. In alternativa, puoi risolvere questo errore creando una nuova tabella con lo schema aggiornato.

Esegui il comando SHOW CREATE TABLE per generare la query che ha creato la tabella. Quindi, visualizza il tipo di dati della colonna per tutte le colonne dall'output di questo comando. Trova la colonna con il tipo di dati tinyint e modifica il tipo di dati di questa colonna in smallint, bigint o int.

Per aggiornare lo schema della tabella con Catalogo dati, procedi come segue:

  1. Apri la console AWS Glue.
  2. Nel riquadro di navigazione, scegli Tabelle.
  3. Seleziona la tabella che desideri aggiornare.
  4. Scegli Azione, quindi scegli Visualizza dettagli.
  5. Scegli Modifica schema.
  6. Scorri fino alla colonna con il tipo di dati tinyint, quindi scegli tinyinit.
  7. Per Tipo di colonna, seleziona smallint, bigint o int dal menu a tendina.
  8. Scegli Aggiorna.
  9. Nella pagina Modifica schema, scegli Salva.

GENERIC_INTERNAL_ERROR: Il numero di valori della partizione non corrisponde al numero di filtri

Per risolvere questo errore, effettuate una delle seguenti operazioni:

ALTER TABLE doc_example_table DROP PARTITION (date = '2014-05-14');

ALTER TABLE doc_example_table ADD PARTITION (date = '2016-05-14', country = 'IN');

GENERIC_INTERNAL_ERROR: Multiple entries with same key

Se le righe hanno più colonne con la stessa chiave, è necessaria la pre-elaborazione dei dati per includere una coppia chiave-valore valida. Se solo alcuni dati hanno chiavi duplicate e se desideri ignorarli, imposta ignore.malformed.json come SERDEPROPERTIES in org.openx.data.jsonserde.JsonSerDe.

Se i nomi delle chiavi sono uguali ma con maiuscole o minuscole diverse (ad esempio: "Colonna", "colonna"), è necessario utilizzare la mappatura. Questo perché hive non supporta le colonne con distinzione tra maiuscole e minuscole. Per fare ciò, è necessario configurare SerDe per ignorare il maiuscolo.

Effettua le seguenti operazioni:

CREATE TABLE mytable (  
  time1 string,
  time2 string)
 ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
"case.insensitive" = "false", --tells hive to ignore key case
"mapping.time1"= "time", -- lowercase 'time' mapped into 'time1'
"mapping.time2"= "Time") -- uppercase to 'time2'

Informazioni correlate

Tipi di dati in Amazon Athena

Partizionamento dei dati in Athena

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa