Мне нужно обновить значения в массиве в таблице BigQuery - PullRequest
1 голос
/ 11 июня 2019

Мне нужно очистить некоторые почтовые адреса из вложенного поля (в массиве).

Я создал регулярное выражение для распознавания адресов и их обновления. Это работает с таблицами, где данные не находятся в массиве, но я не могу заставить их работать там, где данные, которые я хочу очистить, находятся в массиве.

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 Ответ

2 голосов
/ 12 июня 2019

Я не могу заставить его работать там, где данные, которые я хочу очистить, находятся в массиве.

Не уверен, на чем основана схема вашей таблицы, поэтому ниже приведен примерв схеме для таблиц ga_sessions_ из bigquery-public-data.google_analytics_sample общедоступного набора данных, которая выглядит так, как будто ваша схема может быть схожей, поэтому вам будет легко настроить ее на конкретный вариант использования

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...