Bigquery Regexp 从 2 种不同的模式中提取
Bigquery Regexp pull from 2 different patterns
我试图从我的 bigquery 数据中的 url 中提取产品搜索颜色,但是 url 格式在某一时刻发生了变化,所以我试图从两种不同的格式中提取它们。
第一个像/someproduct/color/blue/color/red
,第二个像/someproduct/?colors=blue,red
。
在这两个例子中,这个人过滤了多种颜色,我希望提取的输出像 'blue,red' 一样,并且都在一列中。
我可以拉第一个:
REGEXP_EXTRACT_all(url,r'color/([A-Za-z]+)')
第二个是:
REGEXP_EXTRACT(url,r'colors=(\w*,\w*)')
第一个产生一个数组,我不知道如何让所有输出显示为一行中的一个项目。一个人最多可以过滤 20 种颜色,因此在这两种 URL 类型中可以有很多重复。
第二个也可以使用一些改进,因为我必须为每个额外的过滤颜色添加一个额外的 \w*,
,并且我有一个处理该问题的 case 语句,但我认为它不是最有效的处理方式。
考虑以下方法
select url,
coalesce(regexp_extract(url, r'colors=(\w*,\w*)'), array_to_string(regexp_extract_all(url,r'color/([A-Za-z]+)'), ',')) colors
from your_table
如果应用于您问题中的示例数据 - 输出为
我试图从我的 bigquery 数据中的 url 中提取产品搜索颜色,但是 url 格式在某一时刻发生了变化,所以我试图从两种不同的格式中提取它们。
第一个像/someproduct/color/blue/color/red
,第二个像/someproduct/?colors=blue,red
。
在这两个例子中,这个人过滤了多种颜色,我希望提取的输出像 'blue,red' 一样,并且都在一列中。
我可以拉第一个:
REGEXP_EXTRACT_all(url,r'color/([A-Za-z]+)')
第二个是:
REGEXP_EXTRACT(url,r'colors=(\w*,\w*)')
第一个产生一个数组,我不知道如何让所有输出显示为一行中的一个项目。一个人最多可以过滤 20 种颜色,因此在这两种 URL 类型中可以有很多重复。
第二个也可以使用一些改进,因为我必须为每个额外的过滤颜色添加一个额外的 \w*,
,并且我有一个处理该问题的 case 语句,但我认为它不是最有效的处理方式。
考虑以下方法
select url,
coalesce(regexp_extract(url, r'colors=(\w*,\w*)'), array_to_string(regexp_extract_all(url,r'color/([A-Za-z]+)'), ',')) colors
from your_table
如果应用于您问题中的示例数据 - 输出为