使用 AWS Athena 或 PrestoDB Regex 函数提取字符串
Extract Strings Using AWS Athena or PrestoDB Regex Function
我有一个名为table的
logs
列名为
url
他的价值是这样的
https://api.abc.com:443/xyz/live/dashboard_critical/v1?cust_id=-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111&model_id=&startdate=2021-06-29&enddate=2021-07-28&wcombo=&site_id=&instance=&unit=&combo=&source=&priority=&verification=&critical=Yes%7Ctrue&percentile=95&startevent=receiveddatetime&endevent=uploadtohostdatetime
我试图提取 '/' OR '?' OR '%7C'[ 之后的所有字符串=31=] 或 '&'
我可以单独提取它,但不能将所有 4 个一起提取
SELECT regexp_extract_all(url, '\d+[/]*')
FROM logs.url
WHERE request_verb='GET'
AND REGEXP_LIKE(url, 'https://api.abc.com:443/xyz/live/');
我正在寻找如下输出
[https:,api.abc.com:443,xyz,live,dashboard_critical,v1,cust_id=-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,model_id=,startdate=2021-06-29,enddate=2021-07-28,wcombo=,site_id=,instance=,unit=,combo=,source=,priority=,verification=,critical=Yes,true,percentile=95,startevent=receiveddatetime,endevent=uploadtohostdatetime]
您可以使用 regexp_split(str, regexp)
函数,作为正则表达式模式连接所有值,字符串应使用 |
拆分(或在正则表达式中),它将生成所需的数组。注意:部分字符在Presto CLI或regexp中有特殊含义,需要屏蔽。
select regexp_split(url,'/+|\?|%%7C|&')
正则表达式含义:
/+
- 一个或多个斜杠
|
- 或者
\?
- 字面上的 ?
,需要用反斜杠屏蔽,因为 ?
在 regexp
中有特殊含义
|
- 或者
%%7C
- 字面上的 %7C
。 %
在Presto CLI中有特殊含义,presto使用双字符表示法进行屏蔽。
|
- 或者
&
- 字面上的 &
得到ARRAY后,可以进行拼接、分解等
我有一个名为table的
logs
列名为
url
他的价值是这样的
https://api.abc.com:443/xyz/live/dashboard_critical/v1?cust_id=-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111%7C-1111&model_id=&startdate=2021-06-29&enddate=2021-07-28&wcombo=&site_id=&instance=&unit=&combo=&source=&priority=&verification=&critical=Yes%7Ctrue&percentile=95&startevent=receiveddatetime&endevent=uploadtohostdatetime
我试图提取 '/' OR '?' OR '%7C'[ 之后的所有字符串=31=] 或 '&'
我可以单独提取它,但不能将所有 4 个一起提取
SELECT regexp_extract_all(url, '\d+[/]*')
FROM logs.url
WHERE request_verb='GET'
AND REGEXP_LIKE(url, 'https://api.abc.com:443/xyz/live/');
我正在寻找如下输出
[https:,api.abc.com:443,xyz,live,dashboard_critical,v1,cust_id=-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,model_id=,startdate=2021-06-29,enddate=2021-07-28,wcombo=,site_id=,instance=,unit=,combo=,source=,priority=,verification=,critical=Yes,true,percentile=95,startevent=receiveddatetime,endevent=uploadtohostdatetime]
您可以使用 regexp_split(str, regexp)
函数,作为正则表达式模式连接所有值,字符串应使用 |
拆分(或在正则表达式中),它将生成所需的数组。注意:部分字符在Presto CLI或regexp中有特殊含义,需要屏蔽。
select regexp_split(url,'/+|\?|%%7C|&')
正则表达式含义:
/+
- 一个或多个斜杠
|
- 或者
\?
- 字面上的 ?
,需要用反斜杠屏蔽,因为 ?
在 regexp
|
- 或者
%%7C
- 字面上的 %7C
。 %
在Presto CLI中有特殊含义,presto使用双字符表示法进行屏蔽。
|
- 或者
&
- 字面上的 &
得到ARRAY后,可以进行拼接、分解等