如何在BigQuery中去除字符串中的相邻重复项?
BigQuery去除字符串中相邻重复项的两种解决方案
正则表达式方案
利用BigQuery的REGEXP_REPLACE函数,通过正则匹配并替换相邻重复的条目,适合分隔符固定的场景:
SELECT REGEXP_REPLACE( your_table.your_column, r'([^>]+)(?: >> \1)+', r'\1' ) AS cleaned_string FROM your_table;
正则逻辑说明
([^>]+):捕获单个页面条目(匹配所有非>的字符,适配Page X格式)(?: >> \1)+:匹配1次及以上的>>+ 捕获到的重复条目(\1是反向引用,对应第一个捕获组的内容)- 替换为
\1:保留唯一的相邻重复条目,去掉后续重复项
数组遍历方案
如果页面名称可能包含特殊字符,或者需要更灵活的判断逻辑,可通过数组拆分+窗口函数实现:
WITH processed_data AS ( SELECT original_column, page, pos, LAG(page) OVER (PARTITION BY original_column ORDER BY pos) AS prev_page FROM your_table, UNNEST(SPLIT(original_column, ' >> ')) AS page WITH OFFSET AS pos ) SELECT original_column, STRING_AGG(page, ' >> ' ORDER BY pos) AS cleaned_string FROM processed_data WHERE prev_page IS NULL OR page != prev_page GROUP BY original_column;
步骤说明
SPLIT(original_column, ' >> '):将字符串按分隔符拆分为数组UNNEST(...) WITH OFFSET:展开数组并保留元素的原始位置LAG(page) OVER (...):获取当前元素的前一个元素- 过滤条件:保留第一个元素(
prev_page IS NULL),以及与前一个元素不同的条目 STRING_AGG:将过滤后的元素重新拼接为字符串
内容的提问来源于stack exchange,提问作者Arbie
相关产品推荐
相关产品推荐

