Google BigQuery - 更新嵌套的重复字段

Posted

技术标签:

【中文标题】Google BigQuery - 更新嵌套的重复字段【英文标题】:Google BigQuery - Updating a nested repeated field 【发布时间】:2017-07-04 13:59:36 【问题描述】:

我正在尝试更新 BigQuery 中 Google Analytics 导出中的 hits.page.pagePath 字段,但是我无法使用文档中概述的方法取消嵌套该字段。在我的例子中,pagePath 字段嵌套在两个级别,“hits”和“page”。

https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax#update_repeated_records

以下代码不完整,但我无法从页面 RECORD 中取消嵌套 pagePath。

UPDATE `project-name.datasetId.ga_sessions_yyyymmdd`

SET hits = ARRAY( 
  SELECT page.pagePath FROM UNNEST(hits) as pagePath
  )

WHERE fullVisitorID like "%1%"

有没有人设法在 GA 导出中使用更新此字段或类似字段?

谢谢。

【问题讨论】:

不能完全理解你在这里想要做什么。为什么要更新ga_sessionhits 表?出口出了什么问题?你想用fullvisitor 在他的会话中的相同点击来更新它吗? 【参考方案1】:

以下是 BigQuery 标准 SQL

UPDATE `project-name.datasetId.ga_sessions_yyyymmdd`
SET hits =  ARRAY(
    SELECT AS STRUCT * REPLACE(
      (SELECT AS STRUCT * 
        REPLACE('Your New pagePath' AS pagePath) 
        FROM UNNEST([page])
      ) AS page) 
    FROM UNNEST(hits)
  ) 
WHERE fullVisitorID like "%1%"    

正如您在上面的示例中看到的,您可以将 pagePath 替换为字符串“您的新 pagePath” 当然实际上你会希望在这里有一些逻辑 - 所以将该部分替换为你需要的任何逻辑 - 例如,你需要 UPPER 整个字符串 - 你会使用类似下面的东西

        REPLACE(UPPER(pagePath) AS pagePath) 

【讨论】:

当有人问起这个问题时,我意识到我搞砸了我原来的答案 :) 也感谢您发布答案! 当然,我注意到您的原始答案不符合犹太教规定,所以我发布了我的:o) 我不得不将内部位修改为例如ARRAY(SELECT AS STRUCT * REPLACE(....) FROM UNNEST(page)) as page,否则我得到“创建嵌套数组不支持错误。【参考方案2】:

这应该可以帮助您入门。您需要包含 hits 中的所有其他内容才能执行更新,包括嵌套的 page

UPDATE `you_dataset.tablename`
SET hits = ARRAY(
  SELECT AS STRUCT * REPLACE (
    (SELECT AS STRUCT page.* REPLACE ('foo' AS pagePath)) AS page
  )
  FROM UNNEST(hits) as pagePath
)
WHERE fullVisitorID like "%1%"

【讨论】:

以上是关于Google BigQuery - 更新嵌套的重复字段的主要内容,如果未能解决你的问题,请参考以下文章

在 Bigquery 中使用 where 条件更新嵌套记录

将 json 格式数据加载到 google bigquery 性能问题

Google BigQuery 中的嵌套字段

Google BigQuery 中的空嵌套字段

如何从未嵌套的数据(BigQuery 中的 Google Analytics 数据)返回正确的汇总总数

从 Google Ads BigQuery 数据传输中提取/取消嵌套数组