我需要更新BigQuery表中的数组中的值

时间:2019-06-11 15:44:16

标签: google-bigquery

我需要从嵌套字段(数组)中清除一些邮件地址。

我创建了一个正则表达式来识别并更新地址。该方法适用于数据不在数组中的表,但是我无法使其用于要清除的数据位于数组中的表。

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的值的字段页>

1 个答案:

答案 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