如何在BigQuery中通过LIKE语句获取作业涉及的具体表与字段?
在BigQuery中实现提取作业涉及的表和字段列
完全可以实现你要的效果。下面是具体的SQL写法,核心思路是用正则提取所有匹配的表和字段,再通过聚合函数拼接成逗号分隔的字符串:
完整SQL示例
SELECT Job_ID, -- 去重后拼接涉及的表 STRING_AGG(DISTINCT matched_table, ', ') AS Tables, -- 去重后拼接涉及的字段 STRING_AGG(DISTINCT matched_field, ', ') AS Fields FROM ( SELECT Job_ID, job_info, -- 提取所有匹配的表名 UNNEST(REGEXP_EXTRACT_ALL(job_info, r'(table_1|table_2|table_3)')) AS matched_table, -- 提取所有匹配的字段名 UNNEST(REGEXP_EXTRACT_ALL(job_info, r'(field_1|field_2|field_3|field_4|field_5)')) AS matched_field FROM your_table_name -- 替换成你的实际表名 -- 保留原有的筛选条件 WHERE (job_info LIKE '%table_1%' OR job_info LIKE '%table_2%' OR job_info LIKE '%table_3%') AND (job_info LIKE '%field_1%' OR job_info LIKE '%field_2%' OR job_info LIKE '%field_3%' OR job_info LIKE '%field_4%' OR job_info LIKE '%field_5%') ) GROUP BY Job_ID
关键逻辑说明
- REGEXP_EXTRACT_ALL:从
job_info字符串中提取所有符合正则规则的表/字段名,返回一个数组。这里用(table_1|table_2|table_3)精准匹配你指定的表名,避免误匹配类似table_10这类无关内容。 - UNNEST:把数组拆分成多行,这样每个匹配的表/字段会单独占一行。
- STRING_AGG + DISTINCT:按
Job_ID分组后,将同一作业下的表/字段去重,再拼接成逗号分隔的字符串,正好对应你想要的列格式。
注意事项
如果你的表名/字段名带有特殊前缀(比如proj.dataset.table_1),可以调整正则表达式来适配,例如r'proj\.dataset\.(table_1|table_2|table_3)',确保提取的内容准确。
内容的提问来源于stack exchange,提问作者Santiago
相关产品推荐
相关产品推荐

