使用 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后,可以进行拼接、分解等