我需要从嵌套字段(数组)中清除一些邮件地址。
我创建了一个正则表达式来识别并更新地址。该方法适用于数据不在数组中的表,但是我无法使其用于要清除的数据位于数组中的表。
UPDATE `somedata`, UNNEST(hits) AS hits
set
page_url = if (regexp_contains(hits.url,"([a-zA-Z0-9._%-]+(?:@|%40)[a-zA-Z0-9._%-]+[.][a-zA-Z]{2,})"), regexp_replace(hits.url,"([a-zA-Z0-9._%-]+(?:@|%40)[a-zA-Z0-9._%-]+[.][a-zA-Z]{2,})","removed%40removed.com"), hits.url)
WHERE
regexp_contains(hits.url,"([a-zA-Z0-9._%-]+(?:@|%40)[a-zA-Z0-9._%-]+[.][a-zA-Z]{2,})")
无法访问类型为ARRAY的值的字段页>
答案 0 :(得分:2)
我无法将其用于要清除的数据在数组中的位置。
不确定表的架构是什么,因此下面的示例基于bigquery-public-data.google_analytics_sample
公共数据集中ga_sessions_表的架构,因为您的架构可能看起来很相似,因此您很容易调整为自己的准确模式用例
UPDATE `bigquery-public-data.google_analytics_sample.ga_sessions_20170801`
SET hits = ARRAY(
SELECT AS STRUCT * REPLACE(
(SELECT AS STRUCT *
REPLACE(REGEXP_REPLACE(pagePath,r'match_expression','replace_expression') AS pagePath)
FROM UNNEST([page])
) AS page)
FROM UNNEST(hits)
)
WHERE TRUE