【问题标题】:Biqquery Update only part of PagepathBigquery 仅更新部分页面路径
【发布时间】: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 声明...请您帮忙。 谢谢

【问题讨论】:

    标签: arrays google-bigquery


    【解决方案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 子句在您的原始问题中是正确的(因为我根本没有更改它)并且做您想要的 - 以上就是您要求的!

    【讨论】:

    • 太好了。非常感谢你的帮助。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 2012-09-12
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多