

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.

# Grok SerDe
<a name="grok-serde"></a>

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](https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns). Vous pouvez aussi créer des modèles personnalisés.

## Nom de la bibliothèque de sérialisation
<a name="library-name"></a>

Le nom de la bibliothèque de sérialisation du Grok SerDe est. `com.amazonaws.glue.serde.GrokSerDe`

## Comment utiliser le Grok SerDe
<a name="grok-serde-using"></a>

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'expression `input.format`. Ce nom est facultatif. Pour inclure plusieurs entrées dans le modèle d' expression `input.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` et `OUTPUTFORMAT` 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
<a name="examples"></a>

Les exemples de cette section s’appuient sur la liste de modèles Grok prédéfinis. Pour plus d'informations, consultez [grok-patterns sur GitHub .com](https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns).

### Exemple 1
<a name="example-1"></a>

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 modèle tel que `%{NOTSPACE:column}` pour mapper les colonnes, puis spécialisez les colonnes si nécessaire.

### Exemple 2
<a name="example-2"></a>

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 :
+ Ajoutez le modèle Grok au format `input.format` pour chaque colonne. Par exemple, pour `timestamp`, ajoutez `%{TIMESTAMP_ISO8601:timestamp}`. Pour `loglevel`, 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
<a name="example-3"></a>

Dans l’exemple suivant relatif aux [journaux d’accès aux serveurs Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/LogFormat.html), l’instruction `CREATE TABLE` comporte l’expression `'input.grokCustomPatterns'`, qui contient deux entrées de modèle séparées par le caractère d’échappement de saut de ligne (`\n`), comme illustré 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
<a name="grok-serde-see-also"></a>
+ [Understanding Grok Patterns](https://edgedelta.com/company/blog/what-are-grok-patterns) (site web externe)
+ [Motifs intégrés](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#classifier-builtin-patterns) (*guide de AWS Glue l'utilisateur*)