Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Grok SerDe
Logstash Grok SerDe è una libreria con una serie di modelli specializzati per la deserializzazione di dati di testo non strutturati, solitamente log. Ogni modello Grok è un'espressione regolare con nome. Puoi identificare e riutilizzare questi modelli di deserializzazione in base alle esigenze. Ciò rende più semplice utilizzare Grok anziché le espressioni regolari. Grok fornisce una serie di modelli predefiniti
Nome della libreria di serializzazione
Il nome della libreria di serializzazione per SerDe Grok è. com.amazonaws.glue.serde.GrokSerDe
Come usare Grok SerDe
Per specificare Grok SerDe durante la creazione di una tabella in Athena, usa ROW FORMAT
SERDE 'com.amazonaws.glue.serde.GrokSerDe'
la clausola, seguita dalla clausola che specifica WITH
SERDEPROPERTIES
i modelli da abbinare nei tuoi dati, dove:
-
L' espressione
input.format
definisce i modelli che devono corrispondere ai dati. Questo dato è obbligatorio. -
L' espressione
input.grokCustomPatterns
definisce un modello personalizzato con nome, che potrà essere utilizzato successivamente all'interno dell'espressioneinput.format
. Si tratta di un'opzione facoltativa. Per includere più voci di modello nell'espressioneinput.grokCustomPatterns
, utilizza la carattere escape nuova riga (\n
) per separarle, come segue:'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)
.\n
INSIDE_BRACKETS ([^\\]]*)') -
Le clausole
STORED AS INPUTFORMAT
eOUTPUTFORMAT
sono obbligatorie. -
La clausola
LOCATION
specifica un bucket Amazon S3 che può contenere più oggetti dati. Tutti gli oggetti dati presenti nel bucket vengono deserializzati per creare la tabella.
Esempi
Gli esempi in questa sezione si basano sull'elenco di modelli Grok predefiniti. Per ulteriori informazioni, vedere grok-patterns
Esempio 1
Questo esempio utilizza l'origine dati dalle voci del log mail Postfix salvate in s3://amzn-s3-demo-bucket/groksample/
.
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>
La seguente istruzione crea una tabella in Athena denominata mygroktable
dall'origine dati, utilizzando un modello personalizzato e i modelli predefiniti da te specificati:
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
/';
Inizia con uno schema come quello %{NOTSPACE:column}
di mappare prima le colonne, quindi specializza le colonne se necessario.
Esempio 2
In questo esempio, è necessario creare una query per i log di Log4j. Le voci dei log di esempio sono in questo formato:
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
Per interrogare questi dati di registro:
-
Aggiungi il modello Grok per
input.format
per ogni colonna. Ad esempio, pertimestamp
, aggiungi%{TIMESTAMP_ISO8601:timestamp}
. Perloglevel
, aggiungi%{LOGLEVEL:loglevel}
. -
Assicurati che il modello in
input.format
corrisponda esattamente al formato del log mappando i trattini (-
) e le virgole che separano le voci nel formato di log.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
/';
Esempio 3
Il seguente esempio di CREATE TABLE
istruzione Amazon S3 server access logs mostra l''input.grokCustomPatterns'
espressione che contiene due voci di pattern, separate dal carattere di escape di nuova riga (\n
), come mostrato in questo frammento della query di esempio:. 'input.grokCustomPatterns'='INSIDE_QS
([^\"]*)
\n
INSIDE_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'
Consulta anche
-
Comprensione di Grok
Patterns (sito Web esterno) -
Schemi integrati (Guida AWS Glue per l'utente)