如何拆分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
代码说明:
- 拆分并展开行:用
SPLIT(accessentries, '、')把单行中用顿号分隔的多个AccessEntry拆成数组,再通过UNNEST将数组展开为独立行,同时自动重复对应的projectname和datasetname。 - 提取role:正则表达式
r'role=([^,]+)'匹配role=之后、逗号之前的所有内容,精准提取角色值。 - 提取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
相关产品推荐
相关产品推荐

