Grok SerDe - Amazon Athena

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Grok SerDe

Der Logstash Grok SerDe ist eine Bibliothek mit einer Reihe von speziellen Mustern für die Deserialisierung von unstrukturierten Textdaten, normalerweise Logs. Jedes Grok-Muster ist ein benannter regulärer Ausdruck. Sie können diese Deserialisierungsmuster identifizieren und bei Bedarf wiederverwenden. Dies macht die Verwendung von Grok einfacher als die Verwendung regulärer Ausdrücke. Grok bietet eine Reihe vordefinierter Muster. Sie können auch benutzerdefinierte Muster erstellen.

Name der Serialisierungsbibliothek

Der Name der Serialisierungsbibliothek für die SerDe Grok lautet. com.amazonaws.glue.serde.GrokSerDe

Wie benutzt man den Grok SerDe

Um den Grok anzugeben, SerDe wenn Sie eine Tabelle in Athena erstellen, verwenden Sie die ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe' Klausel, gefolgt von der WITH SERDEPROPERTIES Klausel, die die Muster angibt, die in Ihren Daten übereinstimmen sollen, wobei:

  • Der input.format-Ausdruck definiert die Muster, mit denen in den Daten eine Übereinstimmung erzielt werden soll. Diese Information ist erforderlich.

  • Der input.grokCustomPatterns-Ausdruck definiert ein benanntes benutzerdefiniertes Muster, das Sie anschließend innerhalb des input.format-Ausdrucks verwenden können. Dieser Schritt ist optional. Um mehrere Mustereinträge im input.grokCustomPatterns-Ausdruck einzuschließen, verwenden Sie das Zeilenumbruchszeichen (\n), um diese zu trennen, wie im Folgenden dargestellt: 'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)').

  • Die Klauseln STORED AS INPUTFORMAT und OUTPUTFORMAT sind erforderlich.

  • Die Klausel LOCATION gibt einen Amazon-S3-Bucket an, der mehrere Datenobjekte enthalten kann. Alle Datenobjekte im Bucket werden deserialisiert, um die Tabelle zu erstellen.

Beispiele

Die Beispiele in diesem Abschnitt basieren auf der Liste der vordefinierten Grok-Muster. Weitere Informationen finden Sie unter grok-patterns auf .com. GitHub

Beispiel 1

Dieses Beispiel verwendet Quelldaten von in s3://amzn-s3-demo-bucket/groksample/ gespeicherten Postfix-E-Mail-Protokolleinträgen.

Feb 9 07:15:00 m4eastmail postfix/smtpd[19305]: B88C4120838: connect from unknown[192.168.55.4] Feb 9 07:15:00 m4eastmail postfix/smtpd[20444]: B58C4330038: client=unknown[192.168.55.4] Feb 9 07:15:03 m4eastmail postfix/cleanup[22835]: BDC22A77854: message-id=<31221401257553.5004389LCBF@m4eastmail.example.com>

Die folgende Anweisung erstellt eine Tabelle namens mygroktable in Athena aus den Quelldaten. Dies erfolgt unter Verwendung eines benutzerdefinierten Musters und der von Ihnen angegebenen vordefinierten Muster.

CREATE EXTERNAL TABLE `mygroktable`( syslogbase string, queue_id string, syslog_message string ) ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe' WITH SERDEPROPERTIES ( 'input.grokCustomPatterns' = 'POSTFIX_QUEUEID [0-9A-F]{7,12}', 'input.format'='%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}' ) STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/groksample/';

Beginnen Sie mit einem Muster%{NOTSPACE:column}, z. B. um zuerst die Spalten zuzuordnen, und spezialisieren Sie die Spalten dann, falls erforderlich.

Beispiel 2

Im folgenden Beispiel erstellen Sie eine Abfrage für Log4j-Protokolle. Die Einträge der Beispielprotokolle weisen folgendes Format auf:

2017-09-12 12:10:34,972 INFO - processType=AZ, processId=ABCDEFG614B6F5E49, status=RUN, threadId=123:amqListenerContainerPool23P:AJ|ABCDE9614B6F5E49||2017-09-12T12:10:11.172-0700], executionTime=7290, tenantId=12456, userId=123123f8535f8d76015374e7a1d87c3c, shard=testapp1, jobId=12312345e5e7df0015e777fb2e03f3c, messageType=REAL_TIME_SYNC, action=receive, hostname=1.abc.def.com

Um diese Protokolldaten abzufragen:

  • Fügen Sie das Grok-Muster für jede Spalte zum input.format hinzu. Fügen Sie beispielsweise für timestamp %{TIMESTAMP_ISO8601:timestamp} hinzu. Fügen Sie für loglevel %{LOGLEVEL:loglevel} hinzu.

  • Stellen Sie sicher, dass das Muster in input.format exakt mit dem Format des Protokolls übereinstimmt, indem Sie die Bindestriche (-) und die Kommata zuweisen, die die Einträge im Protokollformat trennen.

    CREATE EXTERNAL TABLE bltest ( timestamp STRING, loglevel STRING, processtype STRING, processid STRING, status STRING, threadid STRING, executiontime INT, tenantid INT, userid STRING, shard STRING, jobid STRING, messagetype STRING, action STRING, hostname STRING ) ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe' WITH SERDEPROPERTIES ( "input.grokCustomPatterns" = 'C_ACTION receive|send', "input.format" = "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} - processType=%{NOTSPACE:processtype}, processId=%{NOTSPACE:processid}, status=%{NOTSPACE:status}, threadId=%{NOTSPACE:threadid}, executionTime=%{POSINT:executiontime}, tenantId=%{POSINT:tenantid}, userId=%{NOTSPACE:userid}, shard=%{NOTSPACE:shard}, jobId=%{NOTSPACE:jobid}, messageType=%{NOTSPACE:messagetype}, action=%{C_ACTION:action}, hostname=%{HOST:hostname}" ) STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/samples/';

Beispiel 3

Das folgende Beispiel für eine Amazon S3 CREATE TABLE S3-Serverzugriffsprotokoll-Anweisung zeigt den 'input.grokCustomPatterns' Ausdruck, der zwei Mustereinträge enthält, getrennt durch das Zeilenumbruchzeichen (\n), wie in diesem Ausschnitt aus der Beispielabfrage gezeigt:. 'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)')

CREATE EXTERNAL TABLE `s3_access_auto_raw_02`( `bucket_owner` string COMMENT 'from deserializer', `bucket` string COMMENT 'from deserializer', `time` string COMMENT 'from deserializer', `remote_ip` string COMMENT 'from deserializer', `requester` string COMMENT 'from deserializer', `request_id` string COMMENT 'from deserializer', `operation` string COMMENT 'from deserializer', `key` string COMMENT 'from deserializer', `request_uri` string COMMENT 'from deserializer', `http_status` string COMMENT 'from deserializer', `error_code` string COMMENT 'from deserializer', `bytes_sent` string COMMENT 'from deserializer', `object_size` string COMMENT 'from deserializer', `total_time` string COMMENT 'from deserializer', `turnaround_time` string COMMENT 'from deserializer', `referrer` string COMMENT 'from deserializer', `user_agent` string COMMENT 'from deserializer', `version_id` string COMMENT 'from deserializer') ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe' WITH SERDEPROPERTIES ( 'input.format'='%{NOTSPACE:bucket_owner} %{NOTSPACE:bucket} \\[%{INSIDE_BRACKETS:time}\\] %{NOTSPACE:remote_ip} %{NOTSPACE:requester} %{NOTSPACE:request_id} %{NOTSPACE:operation} %{NOTSPACE:key} \"?%{INSIDE_QS:request_uri}\"? %{NOTSPACE:http_status} %{NOTSPACE:error_code} %{NOTSPACE:bytes_sent} %{NOTSPACE:object_size} %{NOTSPACE:total_time} %{NOTSPACE:turnaround_time} \"?%{INSIDE_QS:referrer}\"? \"?%{INSIDE_QS:user_agent}\"? %{NOTSPACE:version_id}', 'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket'

Weitere Informationen finden Sie auch unter