将列动态添加到现有 BigQuery 表

Posted

技术标签:

【中文标题】将列动态添加到现有 BigQuery 表【英文标题】:Dynamically add columns to Exsisting BigQuery table 【发布时间】:2016-08-19 08:17:12 【问题描述】:

背景

我正在将文件从本地机器加载到 BigQuery。每个文件都有可变数量的字段。所以,我在运行加载作业时使用 'autodetect=true'

问题是,当第一次运行加载作业并且目标表不存在时,Bigquery 通过推断我们文件中存在的字段来创建表,这将成为新表的架构.

现在,当我使用不同的文件运行加载作业时,该文件包含一些额外的(例如:“中间名”:“xyz”)字段,bigQuery 抛出错误说“字段不存在在表中")

从这个帖子::BigQuery : add new column to existing tables using python BQ API,我了解到可以动态添加列。但是我不明白的是,

查询

我的程序将如何知道,正在上传的文件包含额外的字段并且会发生架构不匹配。(不是问题,如果表不存在 bcoz。将创建新表)。

如果我的程序能够以某种方式推断正在上传的文件中存在的额外字段,我可以将这些列添加到现有表中,然后运行加载作业。

我正在使用 python BQ API。

有关如何自动化此过程的任何想法都会有所帮助。

【问题讨论】:

【参考方案1】:

您应该检查架构更新选项。有一个名为“ALLOW_FIELD_ADDITION”的选项可以帮助您。

【讨论】:

【参考方案2】:

一个天真的解决方案是:

1.使用获取目标表架构

service.tables().get(projectId=projectId, datasetId=datasetId, tableId=tableId)

2.在文件中生成数据架构。

3.比较架构(一种“差异”),然后将这些列添加到目标表中,这些列在您的数据架构中是额外的

任何更好的想法或方法将不胜感激!

【讨论】:

以上是关于将列动态添加到现有 BigQuery 表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 上展开数组以将列添加到现有表

如何将列添加到现有表?

将列添加到现有 SQL Server 表 - 含义

将列 ID 添加到现有表

text 将列添加到现有表

php 将列添加到现有表迁移