Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Le Logstash Grok SerDe est une bibliothèque contenant un ensemble de modèles spécialisés pour la désérialisation de données textuelles non structurées, généralement des journaux. Chaque modèle Grok est une expression régulière nommée. Vous pouvez identifier et réutiliser ces modèles de désérialisation selon vos besoins. Il est ainsi plus facile d'utiliser Grok que des expressions régulières. Grok fournit un ensemble de modèles prédéfinis
Nom de la bibliothèque de sérialisation
Le nom de la bibliothèque de sérialisation du Grok SerDe est. com.amazonaws.glue.serde.GrokSerDe
Comment utiliser le Grok SerDe
Pour spécifier le Grok SerDe lors de la création d'une table dans Athena, utilisez ROW FORMAT
SERDE 'com.amazonaws.glue.serde.GrokSerDe'
la clause, suivie de WITH
SERDEPROPERTIES
la clause qui spécifie les modèles à associer à vos données, où :
-
L'expression
input.format
définit les modèles de correspondance du fichier de données. C'est obligatoire. -
L'expression
input.grokCustomPatterns
définit un modèle personnalisé nommé, que vous pouvez ensuite utiliser au sein de l'expressioninput.format
. Ce nom est facultatif. Pour inclure plusieurs entrées dans le modèle d' expressioninput.grokCustomPatterns
, utilisez le caractère d'échappement de saut de ligne (\n
) pour les séparer, comme suit :'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)
.\n
INSIDE_BRACKETS ([^\\]]*)') -
Les clauses
STORED AS INPUTFORMAT
etOUTPUTFORMAT
sont obligatoires. -
La clause
LOCATION
spécifie un compartiment Simple Storage Service (Amazon S3), qui peut contenir plusieurs objets de données. Tous les objets de données du compartiment sont désérialisés pour créer la table.
Exemples
Les exemples de cette section s'appuient sur la liste des modèles Grok prédéfinis. Pour plus d'informations, consultez grok-patterns sur GitHub .com
Exemple 1
Cet exemple utilise la source des données d'entrées maillog Postfix enregistrées dans 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>
L'instruction suivante crée une table dans Athena appelée mygroktable
depuis le fichier de données source, à l'aide d'un modèle personnalisé et des modèles prédéfinis que vous spécifiez :
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
/';
Commencez par un schéma consistant %{NOTSPACE:column}
à mapper d'abord les colonnes, puis à spécialiser les colonnes si nécessaire.
Exemple 2
Dans l'exemple suivant, vous créez une requête pour les journaux Log4j. Le format des entrées de l'exemple de journal est le suivant :
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
Pour interroger les données de ce journal, procédez comme suit :
-
Ajoutez le modèle Grok au format
input.format
pour chaque colonne. Par exemple, pourtimestamp
, ajoutez%{TIMESTAMP_ISO8601:timestamp}
. Pourloglevel
, ajoutez%{LOGLEVEL:loglevel}
. -
Assurez-vous que le modèle défini dans
input.format
correspond exactement au format du journal, en mappant les tirets (-
) et les virgules qui séparent les entrées dans le format du journal.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
/';
Exemple 3
L'exemple d'CREATE TABLE
instruction de journal d'accès au serveur Amazon S3 suivant montre l''input.grokCustomPatterns'
expression qui contient deux entrées de modèle, séparées par le caractère d'échappement de nouvelle ligne (\n
), comme indiqué dans cet extrait de l'exemple de requête :. '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'
Consultez aussi
-
Comprendre les modèles Grok
(site Web externe) -
Motifs intégrés (guide de AWS Glue l'utilisateur)