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

BigQuery中从assets字段提取指定子串生成asset_code字段的方法

在BigQuery中提取assets字段指定区间内容生成asset_code字段

需求场景

你有一个assets字段,值为类似//bigquery.googleapis.com/projects/ABC/datasets/123的BigQuery资源路径,需要提取路径中//bigquery.googleapis.com/projects/之后、/datasets/之前的部分,生成新字段asset_code。

解决方案

使用BigQuery的REGEXP_EXTRACT函数,结合正则表达式精准匹配目标区间:

SELECT
  assets,
  REGEXP_EXTRACT(assets, r'//bigquery\.googleapis\.com/projects/([^/]+)/datasets/') AS asset_code
FROM
  your_table_name

正则逻辑说明

  • //bigquery\.googleapis\.com/projects/:匹配固定前缀,其中\.是转义后的点(正则中.默认匹配任意字符,必须转义才能匹配真实的点)
  • ([^/]+):核心捕获组,[^/]表示匹配非斜杠的任意字符,+表示匹配1次或多次,精准截取两个斜杠之间的项目名称
  • /datasets/:匹配固定后缀,确保只提取到该标记之前的内容

测试验证

可以用如下语句模拟数据验证效果:

WITH sample_data AS (
  SELECT '//bigquery.googleapis.com/projects/ABC/datasets/123' AS assets UNION ALL
  SELECT '//bigquery.googleapis.com/projects/BlaBla-something/datasets/12345' UNION ALL
  SELECT '//bigquery.googleapis.com/projects/ProjectName/datasets/6789'
)
SELECT
  assets,
  REGEXP_EXTRACT(assets, r'//bigquery\.googleapis\.com/projects/([^/]+)/datasets/') AS asset_code
FROM sample_data

运行后得到结果:

assetsasset_code
//bigquery.googleapis.com/projects/ABC/datasets/123ABC
//bigquery.googleapis.com/projects/BlaBla-something/datasets/12345BlaBla-something
//bigquery.googleapis.com/projects/ProjectName/datasets/6789ProjectName

为什么substr不适合?

substr需要指定固定的起始位置和截取长度,但不同项目名称的长度不一致,无法用统一的数值参数适配所有场景,而正则表达式可以根据分隔符动态定位,更灵活可靠。

内容的提问来源于stack exchange,提问作者user22972173

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:12:24