Come posso risolvere l'errore “FAILED: NullPointerException Name is null" quando interrogo una tabella in Athena?
Quando eseguo una query sulla mia tabella Amazon Athena, ottengo il messaggio “FAILED: NullPointerException Name is null”.
Breve descrizione
I seguenti messaggi di errore sono di tipo FAILED: Errori NullPointerException che puoi ricevere.
NullPointerException Name is null
Questo errore si verifica quando l'attributo TableType non è definito per la tabella interrogata nel Catalogo dati AWS Glue. L'attributo TableType definisce se la tabella corrisponde a una visualizzazione o a una tabella esterna. È possibile definire l'attributo con valori come EXTERNAL\ _TABLE e VIRTUAL_VIEW.
Se desideri eseguire query DDL, come SHOW CREATE TABLE o MSCK REPAIR TABLE, è necessario definire l'attributo TableType.
Potresti ricevere questo errore anche quando usi un modello AWS CloudFormation o l'API AWS Glue e non specifichi la proprietà TableType.
java.lang.NullPointerException: Cannot invoke "java.util.Map.entrySet()" because the return value of "org.apache.hadoop.hive.metastore.api.SerDeInfo.getParameters()" is null
Questo errore si verifica quando i parametri SerDeInfo non sono definiti per la tabella interrogata nel Catalogo dati. I parametri SerDeInfo sono le coppie chiave-valore che definiscono i parametri di inizializzazione per SerDe. È possibile definire l'attributo con il valore “serialization.format”: "1". Per eseguire query DDL, come SHOW CREATE TABLE, è necessario definire i parametri dell'attributo SerDeInfo.
Questo errore potrebbe verificarsi anche quando usi un modello CloudFormation o l'API AWS Glue e non si specifica l’attributo SerDeInfo.
Risoluzione
Esegui i passaggi per la risoluzione dei problemi che meglio si adattano al messaggio di errore visualizzato.
Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
NullPointerException Name is null
Per risolvere questo errore, esegui una o più delle seguenti azioni in base al tuo caso d'uso.
Aggiungi l'attributo durante la creazione della tabella
Aggiungi l'attributo TableType quando crei la tabella.
Nota: se la tabella viene creata utilizzando un'istruzione DDL o un crawler AWS Glue, la proprietà TableType viene definita automaticamente.
Aggiorna il modello CloudFormation
Quando utilizzi un modello CloudFormation per creare una tabella AWS Glue, specifica l'attributo TableType nelle proprietà TableInput della risorsa AWS Glue Table. Imposta TableType su “EXTERNAL_TABLE”. Per ulteriori informazioni, consulta WS::Glue::Table TableInput.
Aggiorna la chiamata all'API AWS Glue
Quando usi la chiamata all'API AWS Glue per creare o aggiornare tabelle, assicurati di includere il parametro TableType nelle proprietà TableInput. Quando chiami le operazioni CreateTable o UpdateTable, imposta il parametro TableType su “EXTERNAL_TABLE”.
Usa l’interfaccia a riga di comando di AWS per aggiornare la tabella
Per aggiornare l'attributo TableType per la tabella, esegui il comando update-table dell'interfaccia a riga di comando di AWS. Per eseguire questo comando, è necessario disporre dell'oggetto TableInput che definisce l'intera architettura della tabella.
Per ottenere l'oggetto TableInput per la tabella, esegui il comando dell’interfaccia a riga di comando di AWS get-table. Quindi, completa i passaggi seguenti per aggiornare l'output di questo comando:
-
Sulla tabella, esegui un comando simile al seguente:
aws glue get-table --catalog-id 1111222233334444 --database doc_example_database --name doc_example_table
Esempio di output:
{ "Table": { "StorageDescriptor": { "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "SortColumns": [], "InputFormat": "org.apache.hadoop.mapred.TextInputFormat", "SerdeInfo": { "SerializationLibrary": "org.apache.hadoop.hive.serde2.OpenCSVSerde", "Parameters": { "serialization.format": "1" } }, "Parameters": { "separatorChar": "," }, "Location": "s3://doc_example_bucket/doc_example_prefix/", "NumberOfBuckets": 0, "StoredAsSubDirectories": false, "Columns": [ { "Type": "int", "Name": "id" }, { "Type": "string", "Name": "name" } ], "Compressed": false }, "UpdateTime": 1620508098.0, "IsRegisteredWithLakeFormation": false, "Name": "doc_example_table", "CreatedBy": "arn:aws:iam::1111222233334444:user/Administrator", "DatabaseName": "doc_example_database", "Owner": "1111222233334444", "Retention": 0, "CreateTime": 1619909955.0, "Description": "tb description" } }
-
Nell'output, rimuovi i parametri UpdateTime, IsRegisteredWithLakeFormation, CreatedBy, DatabaseName e CreateTime. AWS Glue non supporta questi parametri.
Se includi questi parametri nell'attributo TableInput quando esegui il comando update-table, potresti visualizzare i seguenti errori:“Parameter validation failed:Unknown parameter in TableInput: "UpdateTime", deve essere uno dei seguenti: Name, Description, Owner, LastAccessTime, LastAnalyzedTime, Retention, StorageDescriptor, PartitionKeys, ViewOriginalText, ViewExpandedText, TableType, Parameters”
“Unknown parameter in TableInput: “IsRegisteredWithLakeFormation”, deve essere uno dei seguenti: Name, Description, Owner, LastAccessTime, LastAnalyzedTime, Retention, StorageDescriptor, PartitionKeys, ViewOriginalText, ViewExpandedText, TableType, Parameters”
“Unknown parameter in TableInput: “CreatedBy”, deve essere uno dei seguenti: Name, Description, Owner, LastAccessTime, LastAnalyzedTime, Retention, StorageDescriptor, PartitionKeys, ViewOriginalText, ViewExpandedText, TableType, Parameters”
“Unknown parameter in TableInput: “DatabaseName”, deve essere uno dei seguenti: Name, Description, Owner, LastAccessTime, LastAnalyzedTime, Retention, StorageDescriptor, PartitionKeys, ViewOriginalText, ViewExpandedText, TableType, Parameters”
“Unknown parameter in TableInput: “CreateTime”, deve essere uno dei seguenti: Name, Description, Owner, LastAccessTime, LastAnalyzedTime, Retention, StorageDescriptor, PartitionKeys, ViewOriginalText, ViewExpandedText, TableType, Parameters” -
Aggiungi il parametro “TableType”: “EXTERNAL_TABLE” all'output.
-
Utilizza l'output come parametro TableInput per eseguire il seguente comando:
aws glue update-table --catalog-id 1111222233334444 --database-name doc_example_database --table-input '{ "StorageDescriptor": { "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "SortColumns": [], "InputFormat": "org.apache.hadoop.mapred.TextInputFormat", "SerdeInfo": { "SerializationLibrary": "org.apache.hadoop.hive.serde2.OpenCSVSerde", "Parameters": { "serialization.format":"1" } }, "Parameters": { "separatorChar":"," }, "Location": "s3://doc_example_bucket/doc_example_prefix/", "NumberOfBuckets": 0, "StoredAsSubDirectories": false, "Columns": [ { "Type": "int", "Name": "id" }, { "Type": "string", "Name": "name" } ], "Compressed": false }, "Name": "doc_example_table", "TableType": "EXTERNAL_TABLE", "Owner": "1111222233334444", "Retention": 0, "Description": "tb description" }'
Nota: sostituisci le seguenti variabili:
doc_example_database con il nome del tuo database
doc_example_table con il nome della tua tabella
1111222233334444 con l'ID del tuo account AWS
s3://doc_example_bucket/doc_example_prefix/ con la posizione Amazon Simple Storage Service (Amazon S3) in cui è archiviata la tabella
Dopo aver eseguito il comando precedente, il parametro TableType viene aggiornato e le query DDL hanno esito positivo.
java.lang.NullPointerException: Cannot invoke “java.util.Map.entrySet()” because the return value of “org.apache.hadoop.hive.metastore.api.SerDeInfo.getParameters()” is null
Per risolvere questo errore, esegui una o più delle seguenti azioni in base al tuo caso d'uso.
Aggiungi i parametri SerDeInfo durante la creazione della tabella
Quando crei la tabella, aggiungi i parametri SerDeInfo, come “serialization.format”: "1", "field.delim":",".
Aggiorna il modello CloudFormation
Quando utilizzi un modello CloudFormation per creare una tabella AWS Glue, specifica i parametri SerDeInfo. Nella sezione TableInput della tua risorsa Glue Table, vai a StorageDescriptor. Scegli SerDeInfo, quindi sceglie Parametri. Aggiungi {”serialization.format”: “1”} come parametro.
Per ulteriori informazioni, consulta AWS::Glue::Table SerdeInfo.
Aggiorna la chiamata all'API AWS Glue
Quando usi la chiamata all'API AWS Glue per creare o aggiornare tabelle, includi i parametri SerDeInfo in StorageDescriptor di TableInput. Imposta il campo Parametri per SerDeInfo su {”serialization.format”: “1”}.
Questo parametro viene utilizzato quando si chiamano operazioni come CreateTable o UpdateTable. Per ulteriori informazioni, consulta Struttura di StorageDescriptor.
Usa la console AWS Glue per aggiornare la tabella
Per aggiornare le proprietà della tabella nel Catalogo dati, completa i passaggi seguenti:
- Apri la console AWS Glue.
- Nel riquadro di navigazione, in Data Catalog, scegli Tabelle.
- Seleziona la tabella che desideri aggiornare.
- Scegli Azione, quindi scegli Modifica tabella.
- Nella sezione Parametri SerDe, scegli Aggiungi.
- Per Chiave, inserisci “serialization.format” e per Valore inserisci “1”.
- Scegli Salva.
Usa l’interfaccia a riga di comando di AWS per aggiornare la tabella
Per aggiornare i parametri SerDeInfo per la tabella, esegui il comando update-table dell'interfaccia a riga di comando AWS. Per eseguire questo comando, è necessario disporre dell'oggetto TableInput che definisce l'intera architettura della tabella.
Per ottenere l'oggetto TableInput per la tabella, esegui il comando dell’interfaccia a riga di comando di AWS get-table. Quindi, aggiorna l'output di questo comando per includere i parametri SerDeInfo.
Informazioni correlate

Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 4 anni fa
- AWS UFFICIALEAggiornata 2 anni fa