Bigquery 仅更新部分页面路径
Posted
技术标签:
【中文标题】Bigquery 仅更新部分页面路径【英文标题】:Biqquery Update only part of Pagepath 【发布时间】:2018-07-12 08:51:40 【问题描述】:我正在尝试替换 BigQuery 中显示的部分页面路径并保持其他所有内容不变。我可以很好地提取数据,但在尝试编写“更新命令”时遇到问题。我想做的看起来像:
更新ga_sessions_20180101
UNNEST(GA.hits) 命中
设置 hits.page.pagePath = REGEXP_REPLACE(page, r'.*string_selected=([^\&]+)','新值')
其中 CAST(visitID AS STRING) = "1234"
但它当然不喜欢更新后的 unnest 声明...请您帮忙。 谢谢
【问题讨论】:
【参考方案1】:首先,我建议您完善逻辑并通过 SELECT 语句进行简化,以确保您的代码在应用 UPDATE 语句之前可以正常工作
所以,正确的 SELECT 如下所示
SELECT * REPLACE(
ARRAY(
SELECT AS STRUCT * REPLACE(
(SELECT AS STRUCT *
REPLACE(REGEXP_REPLACE(pagePath, r'.*string_selected=([^\&]+)','New Value') AS pagePath)
FROM UNNEST([page])
) AS page)
FROM UNNEST(hits)
) AS hits)
FROM `project.dataset.ga_sessions_20180101`
WHERE CAST(visitID AS STRING) = "1234"
除了一个字段 - pagePath 之外,整个架构保持不变!
现在,在你完善了你的逻辑之后 - 你可以按照下面的方式进行更新
UPDATE `project.dataset.ga_sessions_20180101`
SET hits = ARRAY(
SELECT AS STRUCT * REPLACE(
(SELECT AS STRUCT *
REPLACE(REGEXP_REPLACE(pagePath, r'.*string_selected=([^\&]+)','New Value') AS pagePath)
FROM UNNEST([page])
) AS page)
FROM UNNEST(hits)
)
WHERE CAST(visitID AS STRING) = "1234"
假设 regexp 和 where 子句在您的原始问题中是正确的(因为我根本没有更改它)并且做您想要的 - 以上就是您要求的!
【讨论】:
太好了。非常感谢你的帮助。非常感谢以上是关于Bigquery 仅更新部分页面路径的主要内容,如果未能解决你的问题,请参考以下文章
Bigquery:是不是有一种 json 路径方法可以仅从具有动态键的 json 数组中提取值?