Wie behebe ich den Fehler „FEHLGESCHLAGEN: NullPointerException Name ist Null“, wenn ich eine Tabelle in Athena abfrage?
Ich erhalte das „FEHLGESCHLAGEN“: Der Fehler NullPointerException Name ist Null“, wenn ich meine Amazon Athena-Tabelle abfrage.
Kurzbeschreibung
Die folgenden Fehlermeldungen sind Arten des Fehlers FEHLGESCHLAGEN: NullPointerException, die Sie möglicherweise erhalten.
NullPointerException Name ist Null
Dieser Fehler wird angezeigt, wenn das Attribut TableType für die abgefragte Tabelle im AWS-Glue-Datenkatalog nicht definiert ist. Das Attribut TableType definiert, ob es sich bei der Tabelle um eine externe Tabelle oder eine Ansicht handelt. Sie können das Attribut mit Werten wie EXTERNAL_TABLE und VIRTUAL_VIEW definieren.
Wenn Sie DDL-Abfragen wie SHOW CREATE TABLE oder MSCK REPAIR TABLE ausführen möchten, müssen Sie das Attribut TableType definieren.
Möglicherweise wird dieser Fehler auch angezeigt, wenn Sie eine AWS CloudFormation-Vorlage oder die AWS Glue-API verwenden und die Eigenschaft TableType nicht angeben.
java.lang.NullPointerException: „java.util.Map.entrySet()“ kann nicht aufgerufen werden, da der Rückgabewert von „org.apache.hadoop.hive.metastore.api.SerDeInfo.getParameters()“ null ist
Dieser Fehler wird angezeigt, wenn die Parameter SerdeInfo für die abgefragte Tabelle im Datenkatalog nicht definiert sind. Die Parameter SerdeInfo sind die Schlüssel-Wert-Paare, die Initialisierungsparameter für SerDe definieren. Sie können das Attribut mit Werten wie serialization.format“: „1“ definieren. Um DDL-Abfragen wie SHOW CREATE TABLE auszuführen, müssen Sie die Attributparameter SerdeInfo definieren.
Möglicherweise wird dieser Fehler auch angezeigt, wenn Sie eine CloudFormation-Vorlage oder die AWS Glue-API verwenden und diese Attribute nicht angeben.
Behebung
Folgen Sie den Schritten zur Fehlerbehebung für die Fehlermeldung, die Sie erhalten haben.
**Hinweis:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Troubleshoot AWS CLI errors. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.
NullPointerException Name ist Null
Um diesen Fehler zu beheben, führen Sie je nach Anwendungsfall eine oder mehrere der folgenden Aufgaben aus.
Hinzufügen des Attributs bei der Tabellenerstellung
Fügen Sie das Attribut TableType hinzu, wenn Sie die Tabelle erstellen.
Hinweis: Wenn Sie eine DDL-Anweisung oder einen AWS Glue-Crawler verwenden, um die Tabelle zu erstellen, wird die Eigenschaft TableType automatisch definiert.
Aktualisieren der CloudFormation-Vorlage oder des AWS Glue-API-Aufruf
Wenn Sie eine CloudFormation-Vorlage oder die AWS Glue-API verwendet haben, um die Tabelle zu definieren, und den TableType nicht angegeben haben, fügen Sie das Attribut TableType hinzu.
Verwenden der AWS-CLI, um die Tabelle zu aktualisieren
Um das Attribut TableType für Ihre Tabelle zu aktualisieren, führen Sie den AWS-CLI-Befehl update-table aus. Um diesen Befehl auszuführen, benötigen Sie das Objekt TableInput, das die gesamte Tabellenarchitektur definiert.
Führen Sie den Befehl get-table aus, um das Objekt TableInput für Ihre Tabelle abzurufen. Führen Sie dann die folgenden Schritte aus, um die Ausgabe dieses Befehls zu aktualisieren:
-
Führen Sie auf Ihrer Tabelle einen Befehl aus, der dem folgenden ähnelt:
aws glue get-table --catalog-id 1111222233334444 --database doc_example_database --name doc_example_table
Beispielausgabe:
{ "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" } }
-
Entfernen Sie in der Ausgabe die Parameter UpdateTime, IsRegisteredWithLakeFormation, CreatedBy, DatabaseName und CreateTime. AWS Glue unterstützt diese Parameter nicht.
Wenn Sie diese Parameter in das Attribut TableInput aufnehmen, wenn Sie den Befehl update-table ausführen, erhalten Sie möglicherweise die folgenden Fehler:
Parameter validation failed:Unknown parameter in TableInput: "UpdateTime", must be one of: Name, Description, Owner, LastAccessTime, LastAnalyzedTime, Retention, StorageDescriptor, PartitionKeys, ViewOriginalText, ViewExpandedText, TableType, Parameters Unknown parameter in TableInput: "IsRegisteredWithLakeFormation", must be one of: Name, Description, Owner, LastAccessTime, LastAnalyzedTime, Retention, StorageDescriptor, PartitionKeys, ViewOriginalText, ViewExpandedText, TableType, Parameters Unknown parameter in TableInput: "CreatedBy", must be one of: Name, Description, Owner, LastAccessTime, LastAnalyzedTime, Retention, StorageDescriptor, PartitionKeys, ViewOriginalText, ViewExpandedText, TableType, Parameters Unknown parameter in TableInput: "DatabaseName", must be one of: Name, Description, Owner, LastAccessTime, LastAnalyzedTime, Retention, StorageDescriptor, PartitionKeys, ViewOriginalText, ViewExpandedText, TableType, Parameters Unknown parameter in TableInput: "CreateTime", must be one of: Name, Description, Owner, LastAccessTime, LastAnalyzedTime, Retention, StorageDescriptor, PartitionKeys, ViewOriginalText, ViewExpandedText, TableType, Parameters
-
Fügen Sie den Parameter „TableType“: "EXTERNAL_TABLE" zur Ausgabe hinzu.
-
Verwenden Sie die Ausgabe als den Parameter TableInput, um den Befehl update-table auszuführen:
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" }
Hinweis: Ersetzen Sie die folgenden Variablen durch Ihre Variablen:
- doc\ _example\ _database mit dem Namen Ihrer Datenbank
- doc\ _example\ _table mit dem Namen Ihrer Tabelle
- 1111222233334444 mit Ihrer AWS-Konto-ID
- s3://doc_example_bucket/doc_example_prefix/ mit dem Amazon Simple Storage Service (Amazon S3) -Speicherort, an dem Sie die Tabelle gespeichert haben
Nachdem Sie den vorherigen Befehl ausgeführt haben, wird der Parameter TableType aktualisiert, und die DDL-Abfragen sind erfolgreich.
java.lang.NullPointerException: „java.util.Map.entrySet()“ kann nicht aufgerufen werden, da der Rückgabewert von „org.apache.hadoop.hive.metastore.api.SerDeInfo.getParameters()“ null ist
Um diesen Fehler zu beheben, führen Sie je nach Anwendungsfall eine oder mehrere der folgenden Aufgaben aus.
Hinzufügen der Parameter SerDeInfo während der Tabellenerstellung
Wenn Sie die Tabelle erstellen, fügen Sie SerdeInfo-Parameter hinzu, z. B. „serialization.format“: „1“, „field.delim“:“,“.
Aktualisieren der CloudFormation-Vorlage oder des AWS Glue-API-Aufruf
Wenn Sie eine CloudFormation-Vorlage oder die AWS Glue-API verwendet haben, um die Tabelle zu definieren, und die SerdeInfo-Parameter nicht angegeben haben, fügen Sie die SerdeInfo-Parameter hinzu.
Verwenden der AWS Glue-Konsole, um die Tabelle zu aktualisieren
Gehen Sie wie folgt vor, um die Eigenschaften der Tabelle im Datenkatalog zu aktualisieren:
- Öffnen Sie die AWS Glue-Konsole.
- Wählen Sie im Navigationsbereich Tabellen aus.
- Wählen Sie die Tabelle aus, die Sie aktualisieren möchten.
- Wählen Sie Aktion und dann Tabelle bearbeiten aus.
- Wählen Sie im Abschnitt Serde-Parameter die Option Hinzufügen aus.
- Geben Sie für Schlüssel „serialization.format“ ein, und für Wert geben Sie „1" ein.
- Wählen Sie Speichern aus.
Verwenden der AWS-CLI, um die Tabelle zu aktualisieren
Um die SerdeInfo-Parameter für Ihre Tabelle zu aktualisieren, führen Sie den AWS-CLI-Befehl update-table aus. Um diesen Befehl auszuführen, benötigen Sie das Objekt TableInput, das die gesamte Tabellenarchitektur definiert.
Führen Sie den Befehl get-table aus, um das Objekt TableInput für Ihre Tabelle abzurufen. Aktualisieren Sie dann die Ausgabe dieses Befehls, sodass sie die SerdeInfo-Parameter enthält.
Ähnliche Informationen
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 9 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 4 Jahren