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

如何拆分BigQuery表中accessentries列并提取指定字段至多行?

解决BigQuery拆分AccessEntry并提取字段的问题

可以通过拆分字符串+展开行+正则提取的组合方式实现需求,以下是具体的SQL示例:

SELECT
  projectname,
  datasetname,
  -- 提取role字段值
  REGEXP_EXTRACT(access_entry, r'role=([^,]+)') AS role,
  -- 提取groupbyEmail字段值
  REGEXP_EXTRACT(access_entry, r'groupbyEmail=([^>]+)') AS groupbyEmail
FROM
  `your_project.your_dataset.your_table`,
  -- 将多个AccessEntry拆分为数组并展开为单行
  UNNEST(SPLIT(accessentries, '、')) AS access_entry

代码说明:

  1. 拆分并展开行:用SPLIT(accessentries, '、')把单行中用顿号分隔的多个AccessEntry拆成数组,再通过UNNEST将数组展开为独立行,同时自动重复对应的projectname和datasetname。
  2. 提取role:正则表达式r'role=([^,]+)'匹配role=之后、逗号之前的所有内容,精准提取角色值。
  3. 提取groupbyEmail:正则表达式r'groupbyEmail=([^>]+)'匹配groupbyEmail=之后、右尖括号>之前的所有内容,提取邮箱值。

适配特殊场景:

如果accessentries可能为空(无访问条目),需要保留原表的空行,把UNNEST改为LEFT JOIN UNNEST:

SELECT
  projectname,
  datasetname,
  REGEXP_EXTRACT(access_entry, r'role=([^,]+)') AS role,
  REGEXP_EXTRACT(access_entry, r'groupbyEmail=([^>]+)') AS groupbyEmail
FROM
  `your_project.your_dataset.your_table`
LEFT JOIN UNNEST(SPLIT(accessentries, '、')) AS access_entry ON TRUE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:06:06