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 数组中提取值?

在 Bigquery 中连接表,其中仅更新新字符串

Dataproc + BigQuery 示例 - 有可用的吗?

将数据流式传输到 bigquery 仅返回部分数据

谷歌 bigquery - 更新 sql?

Google Cloud Dataproc 删除 BigQuery 表不起作用