AWS Redshift环境下如何将多个NOT LIKE条件简化为单一行模式
Redshift下简化多NOT LIKE条件的实现方案
AWS Redshift支持POSIX正则匹配语法,可以直接把多个并列排除规则合并为同一个匹配条件,无需重复写NOT LIKE。
优化后的SQL写法
SELECT distinct action_url from event_public WHERE action_url like '%int/about/%/offices%' -- 单条规则实现多个关键词排除 and action_url !~* 'russia|japan|brazil|china|singapore|nigeria|algeria' and event_action ='Pageview'
语法说明
!~*是Redshift原生支持的正则操作符,代表不区分大小写的负向匹配,如果需要严格区分大小写可以替换为!~- 正则规则中的
|代表或逻辑,只要action_url包含任意一个分隔的关键词,就会被过滤,逻辑和原写法的多个NOT LIKE完全一致
可选维护性优化方案
如果后续排除的关键词会频繁变更,也可以用数组批量匹配的写法,新增规则时只需要修改数组元素即可:
SELECT distinct action_url from event_public WHERE action_url like '%int/about/%/offices%' AND NOT EXISTS ( SELECT 1 FROM UNNEST(ARRAY['russia','japan','brazil','china','singapore','nigeria','algeria']) AS banned(word) WHERE action_url ILIKE '%' || banned.word || '%' ) and event_action ='Pageview'
内容的提问来源于stack exchange,提问作者Juan Sebastian Bejarano
相关产品推荐
相关产品推荐

