Perché la mia query Athena fallisce con l'errore "HIVE_INVALID_METADATA: I metadati Hive per la tabella non sono validi: Il descrittore della tabella contiene colonne duplicate”?

3 minuti di lettura
0

La mia query Amazon Athena fallisce con l'errore "HIVE_INVALID_METADATA: I metadati Hive per la tabella sample_table non sono validi: Il descrittore della tabella contiene colonne duplicate”.

Breve descrizione

Questo errore si verifica quando lo schema della tabella AWS Glue contiene nomi di colonne duplicate o colonne con lo stesso nome delle colonne di partizione.

Risoluzione

Controlla i nomi delle colonne duplicate

Per identificare la colonna duplicata, esegui SHOW CREATE TABLE per recuperare lo schema della tabella. Oppure, visualizza lo schema della tabella nella console AWS Glue. Nell'esempio seguente, ci sono due colonne denominate "column1".

CREATE EXTERNAL TABLE `athenatestingduplicatecolumn_athenatesting`(
  `column1` bigint,
  `column2` bigint,
  `column3` bigint,
  `column1` bigint)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://doc-example-bucket/athenatesting/'
TBLPROPERTIES (
  'classification'='csv',
  'skip.header.line.count'='1'
  )

Per risolvere l'errore, esegui CREATE TABLE per ricreare la tabella Athena con nomi di colonna univoci. Oppure, usa la console AWS Glue per rinominare le colonne duplicate:

  1. Apri la console AWS Glue.
  2. Scegli il nome della tabella nell'elenco, quindi scegli Modifica schema.
  3. Scegli il nome della colonna, inserisci un nuovo nome, quindi scegli Salva.

Controlla le colonne della tabella e le colonne delle partizioni con lo stesso nome

Per verificare la presenza di nomi duplicati delle colonne delle partizioni e delle colonne della tabella, visualizza lo schema della tabella nella console AWS Glue. Nell'esempio seguente, la colonna della partizione e la colonna della tabella sono entrambe denominate «id».

Dati di esempio:

{ "id" : 50, "name":"John" }
{ "id" : 51, "name":"Jane" }
{ "id" : 53, "name":"Jill" }

Definizione della tabella:

Nome colonnaTipo di datiChiave di partizione
idint
nomestringa
idstringaPartizione (0)

Utilizza una delle seguenti opzioni per risolvere il problema:

  • Rinomina la colonna delle partizioni nel percorso Amazon Simple Storage Service (Amazon S3).
  • Rinomina il nome della colonna nei dati e nella definizione della tabella AWS Glue.
  • Se i dati di origine sono JSON, ricrea manualmente la tabella e aggiungi le partizioni in Athena, utilizzando la funzione di mappatura, invece di utilizzare un crawler AWS Glue. Nell'esempio seguente, la tabella AWS Glue fa riferimento a s3://doc-example-bucket/athenajsontesting/, che ha questa struttura di partizione: s3://doc-example-bucket/athenajsontesting/id=12. Dopo aver creato la tabella, utilizzare MSCK REPAIR TABLE per caricare la partizione.
CREATE EXTERNAL TABLE `athenajsontest_athenajsontesting2`(
  `id1` int COMMENT 'from deserializer',
  `name` string COMMENT 'from deserializer')
PARTITIONED BY (
  `id` string)
ROW FORMAT SERDE
  'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'mapping.id1'='id')
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://doc-example-bucket/athenajsontesting'
TBLPROPERTIES (
  'classification'='json',
  'transient_lastDdlTime'='1578399113')

Controlla i dati di origine JSON per le chiavi duplicate

Se i dati di origine JSON contengono nomi di colonne che differiscono solo per le maiuscole (ad esempio, {"Username": "bob1234", "username": "bob" }), vedi Perché ricevo errori quando cerco di leggere dati JSON in Amazon Athena? Per impostazione predefinita, Athena non distingue tra maiuscole e minuscole. Athena tratta «Nome utente» e «nome utente» come chiavi duplicate, a meno che non si utilizzi OpenX SerDe e si imposti la proprietà case.insensitive sufalse.


Informazioni correlate

Librerie JSON SerDe

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa