Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Grok SerDe
Logstash Grok SerDe adalah perpustakaan dengan serangkaian pola khusus untuk deserialisasi data teks tidak terstruktur, biasanya log. Setiap pola Grok adalah ekspresi reguler bernama. Anda dapat mengidentifikasi dan menggunakan kembali pola deserialisasi ini sesuai kebutuhan. Ini membuatnya lebih mudah untuk menggunakan Grok dibandingkan dengan menggunakan ekspresi reguler. Grok menyediakan satu set pola yang telah ditentukan sebelumnya
Nama pustaka serialisasi
Nama perpustakaan serialisasi untuk Grok SerDe adalah. com.amazonaws.glue.serde.GrokSerDe
Cara menggunakan Grok SerDe
Untuk menentukan Grok SerDe saat membuat tabel di Athena, gunakan ROW FORMAT
SERDE 'com.amazonaws.glue.serde.GrokSerDe'
klausa, diikuti dengan klausa WITH
SERDEPROPERTIES
yang menentukan pola yang cocok dalam data Anda, di mana:
-
input.format
Ekspresi mendefinisikan pola yang cocok dalam data. Ini wajib diisi. -
input.grokCustomPatterns
Ekspresi mendefinisikan pola kustom bernama, yang selanjutnya dapat Anda gunakan dalaminput.format
ekspresi. Ini bersifat opsional. Untuk menyertakan beberapa entri pola ke dalaminput.grokCustomPatterns
ekspresi, gunakan karakter escape baris baru (\n
) untuk memisahkannya, sebagai berikut:.'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)
\n
INSIDE_BRACKETS ([^\\]]*)') -
OUTPUTFORMAT
KlausulSTORED AS INPUTFORMAT
dan diperlukan. -
LOCATION
Klausa menentukan bucket Amazon S3, yang dapat berisi beberapa objek data. Semua objek data dalam bucket dideserialisasi untuk membuat tabel.
Contoh
Contoh di bagian ini bergantung pada daftar pola Grok yang telah ditentukan. Lihat pola yang telah ditentukan sebelumnya
Contoh 1
Contoh ini menggunakan data sumber dari entri maillog Postfix yang disimpan di. 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>
Pernyataan berikut membuat tabel di Athena dipanggil mygroktable
dari sumber data, menggunakan pola kustom dan pola standar yang Anda tentukan:
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
/';
Mulailah dengan pola sederhana, seperti%{NOTSPACE:column}
, untuk mendapatkan kolom dipetakan terlebih dahulu dan kemudian mengkhususkan kolom jika diperlukan.
Contoh 2
Dalam contoh berikut, Anda membuat kueri untuk log Log4j. Contoh log memiliki entri dalam format ini:
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
Untuk menanyakan data log ini:
-
Tambahkan pola Grok ke
input.format
untuk setiap kolom. Misalnya, untuktimestamp
, tambahkan%{TIMESTAMP_ISO8601:timestamp}
. Untukloglevel
, tambahkan%{LOGLEVEL:loglevel}
. -
Pastikan pola di
input.format
cocok dengan format log persis, dengan memetakan tanda hubung (-
) dan koma yang memisahkan entri dalam format 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
/';
Contoh 3
Contoh berikut CREATE TABLE
pernyataan log akses server Amazon S3 menunjukkan 'input.grokCustomPatterns'
ekspresi yang berisi dua entri pola, dipisahkan oleh karakter escape baris baru (\n
), seperti yang ditunjukkan dalam cuplikan ini dari contoh kueri:. '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'