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_session
的hits
表?出口出了什么问题?你想用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 - 更新嵌套的重复字段的主要内容,如果未能解决你的问题,请参考以下文章
将 json 格式数据加载到 google bigquery 性能问题