Google bigquery BigQuery将查询结果附加到带有必填字段的表中

Google bigquery BigQuery将查询结果附加到带有必填字段的表中,google-bigquery,Google Bigquery,我试图将查询结果附加到与查询结果具有相同模式的现有表中,只是现有表中的某些字段是必需的 这是我尝试运行查询时所有必填字段的错误: Invalid schema update. Field user has changed mode from REQUIRED to NULLABLE 当我将查询结果写入一个新表时,所有字段的名称和类型都相同,但是所有字段的模式都可以为空(除了1个重复字段)。我已经尝试使用和user NOT NULL来处理所有必填字段,但运气不佳。我还尝试将查询结果保存到一个单独

我试图将查询结果附加到与查询结果具有相同模式的现有表中,只是现有表中的某些字段是必需的

这是我尝试运行查询时所有必填字段的错误:

Invalid schema update. Field user has changed mode from REQUIRED to NULLABLE

当我将查询结果写入一个新表时,所有字段的名称和类型都相同,但是所有字段的模式都可以为空(除了1个重复字段)。我已经尝试使用
和user NOT NULL
来处理所有必填字段,但运气不佳。我还尝试将查询结果保存到一个单独的表中,然后修改其架构,但BQ不允许在表上追溯设置必填字段。

您不能将查询结果的架构更改为将NULLABLE翻转为required,因此,您唯一能做的就是更改表的架构,将必需的列转换为可空(注意,如果这样做,以后将无法执行反向操作)。

标准SQL不再支持必需字段。如果您使用的是标准SQL(与传统SQL相反),他们会推荐您


编辑(2017年10月23日):看起来他们已经添加了对的支持。

FWIW,我发现使用模式创建表,然后指定相同的模式查询表是可行的。像这样:

bq mk --schema=myschema.json me.newstuff &&
bq query --format=none --allow_large_results \
  --destination_table=me.newstuff \
  --destination_schema=myschema.json \
  --use_legacy_sql=false \
  "
    SELECT * FROM me.oldstuff
    WHERE data_to_keep is > 0
"

当我使用
bq load
命令进行加载时,我遇到了相同的错误“字段已从必需模式更改为可空”。我解决的方法是改变模式。将字段从“REQUIRED”更改为“NULLABLE”

,因此基本上不可能通过查询带有必填字段的表来追加到表中。。。这似乎有点疏忽。我能想到的唯一方法是将数据作为CSV导出到GCS,然后执行加载作业。在某些情况下,当查询生成必填字段时,这是可能的,但在一般情况下不可能。在我看来,REQUIRED弊大于利,所以我只想将schema更改为所有字段都可以为null。我的表已经生成,并且正在使用REQUIRED字段写入,因此,我无法真正切换现有表。您可以将现有表的架构从REQUIRED更改为NULLABLE,而无需接触数据-这是一个兼容的架构更改。该页面上哪里有这样的内容?看起来他们添加了对REQUIRED字段的支持: