Erstellen einer Tabelle für AWS WAF-Protokolle ohne Partitionierung
In diesem Abschnitt wird beschrieben, wie Sie eine Tabelle für AWS WAF-Protokolle ohne Partitionierung oder Partitionsprojektion erstellen.
Anmerkung
Aus Leistungs- und Kostengründen empfehlen wir nicht, ein nicht partitioniertes Schema für Abfragen zu verwenden. Weitere Informationen finden Sie unter Top 10 Tipps zur Leistungsoptimierung für Amazon Athena
So erstellen Sie die AWS WAF-Tabelle:
-
Kopieren Sie die folgende DDL-Anweisung in die Athena-Konsole. Ändern Sie die Felder nach Bedarf, damit diese mit Ihrer Protokollausgabe übereinstimmen. Ändern Sie den
LOCATIONdes Amazon-S3-Bucket, in dem die Protokolle gespeichert werden.Diese Abfrage verwendet die OpenX JSON SerDe.
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-ObjektoderHIVE_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-Datendateiin der OpenX-SerDe-Dokumentation auf GitHub. CREATE EXTERNAL TABLE `waf_logs`( `timestamp` bigint, `formatversion` int, `webaclid` string, `terminatingruleid` string, `terminatingruletype` string, `action` string, `terminatingrulematchdetails` array < struct < conditiontype: string, sensitivitylevel: string, location: string, matcheddata: array < string > > >, `httpsourcename` string, `httpsourceid` string, `rulegrouplist` array < struct < rulegroupid: string, terminatingrule: struct < ruleid: string, action: string, rulematchdetails: array < struct < conditiontype: string, sensitivitylevel: string, location: string, matcheddata: array < string > > > >, nonterminatingmatchingrules: array < struct < ruleid: string, action: string, overriddenaction: string, rulematchdetails: array < struct < conditiontype: string, sensitivitylevel: string, location: string, matcheddata: array < string > > >, challengeresponse: struct < responsecode: string, solvetimestamp: string >, captcharesponse: struct < responsecode: string, solvetimestamp: string > > >, excludedrules: string > >, `ratebasedrulelist` array < struct < ratebasedruleid: string, limitkey: string, maxrateallowed: int > >, `nonterminatingmatchingrules` array < struct < ruleid: string, action: string, rulematchdetails: array < struct < conditiontype: string, sensitivitylevel: string, location: string, matcheddata: array < string > > >, challengeresponse: struct < responsecode: string, solvetimestamp: string >, captcharesponse: struct < responsecode: string, solvetimestamp: string > > >, `requestheadersinserted` array < struct < name: string, value: string > >, `responsecodesent` string, `httprequest` struct < clientip: string, country: string, headers: array < struct < name: string, value: string > >, uri: string, args: string, httpversion: string, httpmethod: string, requestid: string >, `labels` array < struct < name: string > >, `captcharesponse` struct < responsecode: string, solvetimestamp: string, failureReason: string >, `challengeresponse` struct < responsecode: string, solvetimestamp: string, failureReason: string >, `ja3Fingerprint` string, `oversizefields` string, `requestbodysize` int, `requestbodysizeinspectedbywaf` int ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/prefix/' -
Führen Sie die
CREATE EXTERNAL TABLE-Anweisung im Abfrage-Editor der Athena-Konsole aus. Dadurch wird diewaf_logs-Tabelle registriert und die darin enthaltenen Daten für Abfragen von Athena verfügbar gemacht.