You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 00:36:02