google-bigquery - 我需要更新 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> 的值的字段页面
解决方案
我无法让它适用于我要清理的数据位于数组中的位置。
不确定您的表的架构,因此下面的示例基于来自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
推荐阅读
- c# - 使用 web.config 添加 x-api-key 以请求 HTTP 标头
- graphql - 从 GitHub GraphQL 获取 repositoryOwner 数组
- asp.net - 嵌入 Sharepoint Web 部件时,HttpContext.Current.Session 似乎被重置
- javascript - 当 redux 连接状态发生变化时,有状态的 react-native 功能组件不会重新渲染
- java - 为什么camel kafka autoconfig有两个allow-manual-commit设置?
- android - AndroidManifest.xml 发生冲突。实现 Sinch 库 3.17.1.aar
- wordpress - 当主菜单项是类别时,如何在 Wordpress 中为帖子突出显示选项卡?
- z3 - 在 z3 中定义列表的插入方法的问题
- tensorflow - keras tensorflow2 获取训练数据的结果
- postgresql - 如何将 CloudFormation 模板与在 RDS 中的 Aurora PostgreSQL 实例上创建新数据库的 Lambda 函数连接?