背景
我正在将文件从本地计算机加载到BigQuery.Each文件具有可变数量的字段。因此,我在运行加载作业时使用' autodetect = true' 。
问题是,当第一次运行加载作业并且目标表不存在时,Bigquery通过推断文件中存在的字段来创建表,并且变为新的表的架构。
现在,当我使用不同的文件运行加载作业时,其中包含一些额外的文件(例如:&#34; Middile Name&#34;:&#34; xyz&#34;)字段, bigQuery会抛出错误< / strong>说&#34;字段不存在于表格中#34;)
从这篇文章:: BigQuery : add new column to existing tables using python BQ API,我了解到可以动态添加列。但是我不明白的是,
查询
我的程序将如何知道,正在上传的文件包含额外的字段,并且会出现架构不匹配。(没问题,如果表格不存在bcoz。将创建新表格)
如果我的程序可以某种方式推断出正在上传的文件中存在的额外字段,我可以将这些列添加到现有表中,然后运行加载作业。
我正在使用python BQ API。
有关如何自动执行此过程的任何想法都会有所帮助。
答案 0 :(得分:2)
您应该检查架构更新选项。有一个名为“ALLOW_FIELD_ADDITION”的选项可以帮助您。
答案 1 :(得分:0)
一个天真的解决方案是:
1.使用
获取目标表模式service.tables()。get(projectId = projectId,datasetId = datasetId,tableId = tableId)
2.在文件中生成数据模式。
3.比较模式(类型为“diff”),然后将这些列添加到目标表中,这些列在数据模式中是额外的
任何更好的想法或方法都会受到高度赞赏!