我试图将查询结果附加到与查询结果具有相同模式的现有表中,但现有表中的某些字段是必需的。
当我尝试运行查询时,这是所有必填字段的错误:
Invalid schema update. Field user has changed mode from REQUIRED to NULLABLE
当我将查询结果写入新表时,它具有所有字段的相同名称和类型,但是所有字段的模式都是NULLABLE(1个重复字段除外)。我尝试使用AND user IS NOT NULL
表示所有必填字段,但没有运气。我还尝试将查询结果保存到单独的表中,然后修改其架构,但BQ不允许在表格上追溯设置必填字段。
答案 0 :(得分:5)
标准SQL不再支持必需的字段。如果您使用的是标准SQL(而不是旧版SQL),他们会向您推荐change all your REQUIRED fields to NULLABLE。
编辑(10/23/2017):看起来他们已经添加了对REQUIRED fields in Standard SQL的支持。
答案 1 :(得分:0)
您无法更改查询结果的架构以将NULLABLE翻转为REQUIRED,因此您唯一可以做的就是更改表的架构以将REQUIRED列转换为NULLABLE(注意 - 如果您这样做,则不会能够在以后进行反向操作。)
答案 2 :(得分:0)
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
"
答案 3 :(得分:0)
当我使用bq load
命令进行加载时,出现了同样的错误“字段已从必需模式更改为可空模式”。我解决的方法是更改架构。将该字段从“必需”更改为“可空”