gpt4 book ai didi

sql - EMR Hive正则表达式QueryString值

转载 作者:行者123 更新时间:2023-12-02 21:37:52 27 4
gpt4 key购买 nike

我对Regex不太满意。我正在尝试将自定义日志行捕获到Hive表中。

到目前为止,我可以通过以下内容捕获基本条目:

CREATE EXTERNAL TABLE IF NOT EXISTS elb_logs_v2_9 (

ResponseCode STRING,
Timestamp STRING,
ResponseTime DOUBLE,
RemoteIP STRING,
URL STRING,
UserAgent STRING,
Referer STRING,
Domain STRING,
Version INT

)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (.*) \"(.*)\" \"(.*)\" \"(.*)\" \"(.*)\" (.*)$"
) LOCATION 's3://my-bucket/logfiles/';

这是一个示例日志文件:
204 1434401743 365 XX.XXX.XXX.XXX "/tra.ck?p=1234&a=5432&evt=view&r=1434401750625285" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" "https://referer.org/page.html" "metric.mydomain.org" 7
204 1434401743 269 XX.XXX.XXX.XXX "/tra.ck?p=1234&a=5432&evt=renderTime&v[]=10&r=1434401750650240" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" "https://referer.org/page.html" "metric.mydomain.org" 7

基本结构是:
ResponseCode Timestamp ResponseTimeMS RemoteIP QueryString UserAgent Referer Domain Version

如何使RegEx更进一步,并根据URI中的值创建列?像说一列 pa值,以及一个 eventType来存储 viewrenderTime等?

最佳答案

如果您可以假设请求始终以相同的格式包含正确顺序的参数,则这将起作用。

^([0-9]\d*) ([0-9]\d*) ([0-9]\d*) ([0-9\.X]+) "((?:.*?)p=(\d+)&a=(\d+)&evt=([^&]+).*?)" "([^"]+)" "([^"]+)" "([^"]+)" ([0-9]\d*)$

您可以在此处进行更多编辑和使用: https://regex101.com/r/gS3nO1/2

(编辑)我在这里假设第四项是IP,因此您可以从实际的正则表达式中删除X。

关于sql - EMR Hive正则表达式QueryString值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857273/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com