1

我希望使用 Athena 从 S3 访问日志中获取查询参数的映射。

例如,对于以下日志行示例:

283e.. foo [17/Jun/2017:23:00:49 +0000] 76.117.221.205 - 1D0.. REST.GET.OBJECT 1x1.gif "GET /foo.bar/1x1.gif?placement_tag_id=0&r=574&placement_hash=12345... HTTP/1.1" 200 ... "Mozilla/5.0"

我想得到 [k, v] 的地图查询参数:

Placement_tag_id,0 r,574placement_hash,12345

因此,我将能够运行以下查询:

select * from accessLogs where queryParams.placement_tag_id=0 and X.r>=500

查询参数计数和内容因一个请求而异,因此我不能使用静态 RegEx 模式。

serde2.RegexSerDe在以下 Athena 创建表查询中使用了对日志进行基本拆分,但没有找到实现我想要的方法。我曾想过使用 MultiDelimitSerDe,但 Athena 不支持它。

关于如何实现这一目标的任何建议?

CREATE EXTERNAL TABLE IF NOT EXISTS elb_db.accessLogs ( timestamp string, request string, http_status string, user_agent string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '[^ ]* [^ ]* \\[(.*)\\] [^ ]* [^ ]* [^ ]* [^ ]* [^ ]* "(.*?)" ([^ ]*) [^ ]* [^ ]* [^ ]* [^ ]* [^ ]* ".*?" "(.*?)" [^ ]*' ) LOCATION 's3://output/bucket'

4

0 回答 0