쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

Grok SerDe

포커스 모드
Grok SerDe - Amazon Athena

Logstash Grok SerDe는 비정형 텍스트 데이터(일반적으로 로그)의 역직렬화를 위한 특수 패턴 집합이 있는 라이브러리입니다. 각 Grok 패턴은 명명된 정규식입니다. 필요에 따라 이러한 역직렬화 패턴을 식별하고 재사용할 수 있습니다. 그러면 정규식을 사용하는 경우에 비해 더 쉽게 Grok을 사용할 수 있습니다. Grok은 사전 정의된 패턴 집합을 제공합니다. 사용자 지정 패턴을 만들 수도 있습니다.

직렬화 라이브러리 이름

Grok SerDe의 직렬화 라이브러리 이름은 com.amazonaws.glue.serde.GrokSerDe입니다.

Grok SerDe 사용 방법

Athena에서 테이블을 생성할 때 Grok SerDe를 지정하려면 ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe' 절 뒤에 데이터에서 일치시킬 패턴을 지정하는 WITH SERDEPROPERTIES 절을 사용합니다. 여기서,

  • input.format 표현식은 데이터에서 일치시킬 패턴을 정의합니다. 이 항목은 필수입니다.

  • input.grokCustomPatterns 표현식은 명명된 사용자 지정 패턴을 정의합니다. 이 패턴은 나중에 input.format 표현식에서 사용할 수 있습니다. 이는 선택 사항입니다. 여러 패턴 항목을 input.grokCustomPatterns 표현식에 포함하려면, 줄 바꿈 이스케이프 문자(\n)를 이용해 'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)') 같은 형식으로 구분하세요.

  • STORED AS INPUTFORMATOUTPUTFORMAT 절이 필요합니다.

  • LOCATION 절은 여러 데이터 객체를 포함할 수 있는 Amazon S3 버킷을 지정합니다. 버킷의 모든 데이터 객체가 역직렬화되어 테이블을 생성합니다.

예시

이 섹션의 예제는 사전 정의된 Grok 패턴의 목록에 의존합니다. 자세한 내용은 GitHub.com의 grok-patterns를 참조하세요.

예 1

이 예제는 s3://amzn-s3-demo-bucket/groksample/에 저장된 Postfix maillog 항목의 소스 데이터를 사용합니다.

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>

다음 명령문은 Athena에서 사용자 지정 패턴과 직접 지정한 사전 정의된 패턴을 사용하여 소스 데이터로 mygroktable이라는 테이블을 작성합니다.

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

우선 %{NOTSPACE:column}과 같은 패턴으로 시작해 열이 매핑되도록 한 다음, 필요에 따라 열을 직렬화합니다.

예제 2

다음 예에서는 Log4j 로그에 대한 쿼리를 만듭니다. 예제 로그에는 다음 형식의 항목이 있습니다.

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

이 로그 데이터를 쿼리하려면:

  • 각 열의 input.format에 Grok 패턴을 추가합니다. 예를 들어 timestamp%{TIMESTAMP_ISO8601:timestamp}를 추가합니다. loglevel%{LOGLEVEL:loglevel}을 추가합니다.

  • 대시(-)와 로그 형식에서 항목을 구분하는 쉼표를 매핑하여 input.format의 패턴을 로그의 형식과 정확하게 일치시킵니다.

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

예 3

다음 예제 Amazon S3 서버 액세스 로그 CREATE TABLE 문은 예제 쿼리의 코드 조각 'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)')에서처럼 줄 바꿈 이스케이프 문자(\n)로 구분한 패턴 항목 2개를 포함하는 'input.grokCustomPatterns' 표현식을 보여줍니다.

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'

다음 사항도 참조하세요.

이 페이지에서

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.