在 Redshift 中使用 regex_match 的问题

Posted

技术标签:

【中文标题】在 Redshift 中使用 regex_match 的问题【英文标题】:Problem with using regex_match in Redshift 【发布时间】:2021-01-27 15:59:04 【问题描述】:

我正在使用以下代码进行正则表达式匹配,但出现此错误:

错误:

无效操作:函数regexp_matches(character varying, character varying)不存在;

代码:

WHEN REGEXP_MATCHes (tdahw.referrer, 'www.*/'::text) IS NOT NULL AND     REGEXP_MATCHes(tdahw.event_value, 'www.*/'::text) = REGEXP_MATCHes(tdahw.referrer, 'www.*/'::text) AND tdahw.rolling_count = 1 THEN 'Direct'::text
WHEN REGEXP_MATCHes(tdahw.referrer, 'www.*/'::text) IS NOT NULL AND REGEXP_MATCHes(tdahw.event_value, 'www.*/'::text) <> REGEXP_MATCHes(tdahw.referrer, 'www.*/'::text) AND tdahw.rolling_count = 1 THEN 'Referrer'::text
WHEN REGEXP_MATCHes(tdahw.referrer, 'www.*/'::text) IS NULL THEN 'Referrer'::text

如何改正?

【问题讨论】:

请提供示例数据、期望的结果以及您要实现的逻辑的说明。 样本数据和预期结果:www.abcd.com/xyz 和abcd.com/def 应该被同等对待 www.abcd.com 和abcd.com/xyz 应该被同等对待。 www.abcd.com/xyz 和 www.abcdef.com/xyz 应被视为不相等。 www.abcd.com/xyz 和 www.xyz.com/pqr 应该被视为不相等 【参考方案1】:

使用~:

WHEN tdahw.referrer ~ 'www.*/'::text AND 
     tdahw.event_value ~ 'www.*/'::text AND
     tdahw.referrer ~ 'www.*/'::text AND
     tdahw.rolling_count = 1

【讨论】:

这些情况是否按上述方法处理? 1)REGEXP_MATCHes(tdahw.event_value, 'www.*/'::text) = REGEXP_MATCHes(tdahw.referrer, 'www.*/'::text) 2) REGEXP_MATCHes (tdahw.referrer, 'www.*/': :text) 不为空 @slayer1996 。 . . ~ 返回一个布尔值。您正在尝试比较两个匹配的结果? 是的。查询第一行AND之后的部分是比较

以上是关于在 Redshift 中使用 regex_match 的问题的主要内容,如果未能解决你的问题,请参考以下文章

AWS 在 VPC 中访问 Redshift

使用 java 程序从 STDIN 复制 Redshift

Redshift:不能在 UDF 中使用聚合函数?

我们应该在 Redshift 的存储过程中使用 udf

在 Redshift 的 JOIN 中使用模式名称

在 Redshift 中使用 python UDF 中的表