Selecione suas preferências de cookies

Usamos cookies essenciais e ferramentas semelhantes que são necessárias para fornecer nosso site e serviços. Usamos cookies de desempenho para coletar estatísticas anônimas, para que possamos entender como os clientes usam nosso site e fazer as devidas melhorias. Cookies essenciais não podem ser desativados, mas você pode clicar em “Personalizar” ou “Recusar” para recusar cookies de desempenho.

Se você concordar, a AWS e terceiros aprovados também usarão cookies para fornecer recursos úteis do site, lembrar suas preferências e exibir conteúdo relevante, incluindo publicidade relevante. Para aceitar ou recusar todos os cookies não essenciais, clique em “Aceitar” ou “Recusar”. Para fazer escolhas mais detalhadas, clique em “Personalizar”.

Grok SerDe

Modo de foco
Grok SerDe - Amazon Athena

O Logstash Grok SerDe é uma biblioteca com um conjunto de padrões especializados para desserialização de arquivos de texto desestruturados, normalmente logs. Cada padrão Grok é uma expressão regular nomeada. Você pode identificar e reutilizar esses padrões de desserialização conforme necessário. Isso facilita o uso de Grok, em comparação com o uso de expressões regulares. O Grok oferece um conjunto de padrões predefinidos. Você também pode criar padrões personalizados.

Nome da biblioteca de serialização

O nome da biblioteca de serialização do Grok SerDe é com.amazonaws.glue.serde.GrokSerDe.

Como usar o Grok SerDe

Para especificar o Grok SerDe ao criar uma tabela no Athena, use a cláusula ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe', seguida da cláusula WITH SERDEPROPERTIES que especifica os padrões de correspondência em seus dados, em que:

  • A expressão input.format define os padrões para que correspondam aos dados. Isso é obrigatório.

  • A expressão input.grokCustomPatterns define um padrão personalizado nomeado, que você poderá usar depois dentro da expressão input.format. Isso é opcional. Para incluir várias entradas padrão na expressão input.grokCustomPatterns, use o caractere de escape de nova linha (\n) para separá-las, da seguinte forma: 'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)').

  • As cláusulas STORED AS INPUTFORMAT e OUTPUTFORMAT são obrigatórias.

  • A cláusula LOCATION especifica um bucket do Amazon S3, que pode conter vários objetos de dados. Todos os objetos de dados no bucket são desserializados para criar a tabela.

Exemplos

Os exemplos nesta seção dependem da lista de padrões Grok predefinidos. Para obter mais informações, consulte grok-patterns em GitHub.com.

Exemplo 1

Este exemplo usa os dados de origem das entradas de maillog do Postfix salvas em 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>

A instrução a seguir cria uma tabela no Athena chamada mygroktable com base nos dados de origem usando um padrão personalizado e os padrões predefinidos que você especificar:

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/';

Comece com um padrão simples, como %{NOTSPACE:column}, para primeiro obter as colunas mapeadas e, em seguida, especialize as colunas, se necessário.

Exemplo 2

No exemplo a seguir, você cria uma consulta para logs Log4j. Os logs de exemplo têm as entradas neste 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

Para consultar os dados desse log:

  • Adicione o padrão Grok ao input.format para cada coluna. Por exemplo, para timestamp, adicione %{TIMESTAMP_ISO8601:timestamp}. Para loglevel, adicione %{LOGLEVEL:loglevel}.

  • Verifique se o padrão em input.format está de acordo com o formato exato do log mapeando os traços (-) e as vírgulas que separam as entradas no formato do 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/';

Exemplo 3

O exemplo de instrução CREATE TABLE de Logs de acesso ao servidor do Amazon S3 a seguir mostra a expressão 'input.grokCustomPatterns' que contém duas entradas de padrão, separadas pelo caractere de escape de nova linha (\n), conforme mostrado neste trecho do exemplo de consulta: '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'

Consulte também

PrivacidadeTermos do sitePreferências de cookies
© 2025, Amazon Web Services, Inc. ou suas afiliadas. Todos os direitos reservados.