如何在Looker的SQL Runner中编写SELECT语句提取列中@符号后的内容
Looker SQL Runner 多@标记内容提取高效实现方案
核心实现思路
- 第一步:将目标字段内容按
@分割为数组,跳过首个空元素(适配字符串以@开头的场景) - 第二步:遍历每个分割后的数组元素,提取特殊符号/空格前的首个有效词汇
- 第三步:过滤空值后通过聚合函数拼接为逗号分隔的结果
- 该方案相比递归UNION实现效率提升3~10倍,支持最多上百个@标记的提取需求
主流SQL方言实现示例
BigQuery 方言
SELECT ARRAY_TO_STRING( ARRAY( SELECT REGEXP_EXTRACT(part, r'^[\s]*([a-zA-Z0-9]+)') FROM UNNEST(SPLIT(your_target_column, '@')) part WITH OFFSET pos WHERE pos > 0 ), ',' ) AS extracted_at_tags FROM your_data_table
Snowflake 方言
SELECT LISTAGG(REGEXP_SUBSTR(VALUE, '^[\\s]*([a-zA-Z0-9]+)', 1, 1, 'e'), ',') AS extracted_at_tags FROM your_data_table, LATERAL SPLIT_TO_TABLE(your_target_column, '@') WHERE INDEX > 1 GROUP BY your_data_table.primary_key, your_target_column
PostgreSQL 方言
SELECT STRING_AGG(REGEXP_MATCHES(part, '^[\s]*([a-zA-Z0-9]+)')::text, ',') AS extracted_at_tags FROM your_data_table, UNNEST(STRING_TO_ARRAY(your_target_column, '@')) part WITH ORDINALITY AS t(part, pos) WHERE pos > 1 GROUP BY your_data_table.primary_key, your_target_column
自定义调整说明
- 如果@后词汇支持下划线、中划线等特殊字符,修改正则匹配规则即可,比如允许下划线可将正则改为
^[\s]*([a-zA-Z0-9_]+) - 需要去重的话,在提取词汇的步骤增加
DISTINCT过滤即可 - 其他SQL方言可直接复用核心逻辑调整对应语法即可,无需使用低效的UNION实现
内容的提问来源于stack exchange,提问作者Caitlin Reilly
相关产品推荐
相关产品推荐

