向 BigQuery 中的历史表添加新字段

Posted

技术标签:

【中文标题】向 BigQuery 中的历史表添加新字段【英文标题】:Adding new fields to historical tables in BigQuery 【发布时间】:2016-08-26 12:39:12 【问题描述】:

我每天都将 Google Analytics(分析)数据导出到 BigQuery,这些数据构成了我们主要报告数据集的基础。

随着时间的推移,我需要为我们用来丰富数据的其他内容添加新列 - 例如,例如从 url 到“报告类别”的映射。

这很容易作为一个新列添加到已处理的表中(目前我们所做的所有扩充大约有 10 个处理步骤)。

这个问题是如果利益相关者接着问 - 我们可以将该新列添加到历史数据中吗?

目前我需要重新运行所有日常工作,这非常缓慢且成本高昂。

这种情况经常出现,以至于我正在认真考虑重新设计我的数据管道以适应这样一个事实,即当我需要添加新字段或时,我经常需要不时地删除和重新创建所有数据更正旧的脏数据或其他东西。

我只是想知道是否有更好的方法

    在 BQ 中的旧表中添加一个新列(对于这些情况,我可以根据我定义的基本上是行键的 ga [hit_key] 加入新列,我很乐意手动执行此操作) (不太常见)根据某些 where 条件更新现有表。

只是想知道最佳实践是什么,是否有人遇到过类似的问题,您基本上需要更新一个历史性的 shema,以及是否有办法做到这一点,而不仅仅是删除和重新创建这基本上是我目前正在做的事情。

为了更清楚地了解我目前的方法:我正在使用 [ga_sessions_yyyymmdd] 表并制作一系列 [ga_data_prepN_yyyymmdd] 表,其中要么在每个步骤中添加新列,要么以某种方式减少数据。现在有 11 个这样的步骤,每次我都要走所有 100 个或更多的列。这就是我要尝试设计的内容,因为目前每个阶段 90% 的列甚至都不需要被触摸,因为它们可以在最后可能基于 hit_key 或其他东西重新连接。

虽然尝试分开有点混乱。

【问题讨论】:

【参考方案1】:

可以将新列添加到现有历史表的架构中,但新添加列的值将是 NULL。如果确实需要将值填充到这些列中,最好的方法可能是使用 UPDATE DML 语句。更多详细的试用方法在这里:Does BigQuery support UPDATE, DELETE, and INSERT (SQL DML) statements?

【讨论】:

酷我已经注册了。

以上是关于向 BigQuery 中的历史表添加新字段的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL 查询向 BigQuery 表添加多个分区列

如何将嵌套字段添加到我的 BigQuery 表架构?

使用 SQL 向 BigQuery 中的字段添加说明

JSON 表架构到 bigquery.TableSchema 用于 BigQuerySink

使用流式 API 更新新列后无法向 BigQuery 表插入新值

如何关联多个 BigQuery 数组字段?