Hive JSON SerDe
Der Hive JSON SerDe wird häufig verwendet, um JSON-Daten wie etwa Ereignisse zu verarbeiten. Diese Ereignisse werden als einzeilige Zeichenfolgen aus JSON-codiertem Text dargestellt, die jeweils durch eine neue Zeile voneinander getrennt sind. Der Hive JSON SerDe erlaubt keine doppelten Schlüssel in map- oder struct-Schlüsselnamen.
Anmerkung
Das SerDe erwartet, dass sich jedes JSON-Dokument auf einer einzigen Textzeile befindet, ohne Zeilenabschlusszeichen, die die Felder im Datensatz trennen. Wenn der JSON-Text im hübschen Druckformat vorliegt, erhalten Sie möglicherweise eine Fehlermeldung wie HIVE_CURSOR_ERROR: Zeile ist kein gültiges JSON-Objekt oder HIVE_CURSOR_ERROR: JsonParseException: Unerwartetes Ende der Eingabe: Erwartete Schließmarkierung für OBJEKT, wenn Sie versuchen, die Tabelle abzufragen, nachdem Sie dies erstellt haben. Weitere Informationen finden Sie unter JSON-Datendatei
In der folgenden DDL-Beispielanweisung wird der Hive JSON SerDe verwendet, um eine Tabelle basierend auf Beispiel-Online-Werbedaten zu erstellen. Ersetzen Sie in der LOCATION-Klausel myregion in s3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions durch die Kennung der Region, in der Sie Athena ausführen (zum Beispiel s3://us-west-2.elasticmapreduce/samples/hive-ads/tables/impressions).
CREATE EXTERNAL TABLE impressions ( requestbegintime string, adid string, impressionid string, referrer string, useragent string, usercookie string, ip string, number string, processid string, browsercookie string, requestendtime string, timers struct < modellookup:string, requesttime:string >, threadid string, hostname string, sessionid string ) PARTITIONED BY (dt string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions';
Zeitstempelformaten mit dem Hive JSON SerDe angeben
Um Zeitstempelwerte aus der Zeichenfolge zu analysieren, können Sie das Unterfeld WITH
SERDEPROPERTIES zur Klausel ROW FORMAT SERDE hinzufügen und es verwenden, um den Parameter timestamp.formats anzugeben. Geben Sie im Parameter eine durch Kommas getrennte Liste mit einem oder mehreren Zeitstempelmustern an, wie im folgenden Beispiel:
... ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH SERDEPROPERTIES ("timestamp.formats"="yyyy-MM-dd'T'HH:mm:ss.SSS'Z',yyyy-MM-dd'T'HH:mm:ss") ...
Weitere Informationen finden Sie unter Zeitstempel
Tabelle zum Abfragen laden
Führen Sie nach dem Erstellen der Tabelle MSCK REPAIR TABLE aus, um die Tabelle zu laden und sie von Athena aus abfragen zu können:
MSCK REPAIR TABLE impressions
CloudTrail-Protokolle abfragen
Sie können den Hive-JSON-SerDe verwenden, um CloudTrail-Protokolle abzufragen. Weitere Informationen und CREATE TABLE-Beispielanweisungen finden Sie unter AWS CloudTrail-Protokolle abfragen.