Hive 使用Athena从S3访问日志获取查询参数

Hive 使用Athena从S3访问日志获取查询参数,hive,amazon-athena,hive-serde,Hive,Amazon Athena,Hive Serde,我希望使用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]的地图查询参数: 位置标记id,0 r、 57

我希望使用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]的地图查询参数:

位置标记id,0 r、 574 地址:12345

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

从Access日志中选择*,其中queryParams.placement\u tag\u id=0和X.r>=500

查询参数计数和内容因请求而异,因此我不能使用静态正则表达式模式

我在下面的Athena create table查询中使用了
serde2.RegexSerDe
,对日志进行了基本拆分,但没有找到一种方法来实现我想要的结果。 我曾想过使用multi-serde,但雅典娜不支持它

有没有关于如何实现这一目标的建议

创建外部表(如果不存在)elb_db.accessLogs(
时间戳字符串,
请求字符串,
http_状态字符串,
用户代理字符串
)
行格式SERDE'org.apache.hadoop.hive.serde2.RegexSerDe'
具有serdeproperty(
'序列化.格式'='1',
'input.regex'='[^]*[^]*\\[(.*\\][^]*[^]*[^]*[^]*“(.*?”([^]*)[^]*[^]*[^]*[^]*.*?”(.*?“(.?”[^]*”
)位置“s3://output/bucket”