arrays - Biqquery 仅更新部分页面路径
问题描述
我正在尝试替换 BigQuery 中显示的部分页面路径并保持其他所有内容不变。我可以很好地提取数据,但在尝试编写“更新命令”时遇到问题。我想做的看起来像:
更新ga_sessions_20180101
UNNEST(GA.hits) hits
set hits.page.pagePath = REGEXP_REPLACE(page, r'.*string_selected=([^\&]+)','New Value')
where CAST(visitID AS STRING) = "1234 "
但当然它不喜欢更新后的 unnest 声明......请你帮忙。谢谢
解决方案
首先,我建议您通过 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 子句在您的原始问题中是正确的(因为我根本没有更改它)并且做您想要的 - 以上就是您所要求的!
推荐阅读
- javascript - 滚动时,YouTube 视频嵌入在移动设备上消失
- java - 如何获取页面中多个 URL 的所有链接并检查它是否损坏并在 Excel 表中更新?
- c# - Entity Framework Core 3.1.3 在 AWS Lambda 函数和 AWS API Gateway 无服务器 API 中使用的第一个查询非常慢
- python - 在python中调用函数之前的“例程”函数
- flutter - 如何在颤动中自定义位置按钮?
- php - 删除 foreach 循环的最后一个字符串值
- azure - 我们可以在 ARM 模板部署期间像 Azure 对应用服务域那样运行休息调用吗?
- ios - 通过 Azure DevOps 将 iOS 应用程序发布到 testflight 的问题
- mongodb - 如何监控mongo db副本状态并重新配置repliica
- android - 如何在xml编写的customview中将属性设置为val