BigQuery将查询结果追加到包含必填字段

时间:2016-09-09 16:16:53

标签: google-bigquery

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

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

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

当我将查询结果写入新表时,它具有所有字段的相同名称和类型,但是所有字段的模式都是NULLABLE(1个重复字段除外)。我尝试使用AND user IS NOT NULL表示所有必填字段,但没有运气。我还尝试将查询结果保存到单独的表中,然后修改其架构,但BQ不允许在表格上追溯设置必填字段。

4 个答案:

答案 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命令进行加载时,出现了同样的错误“字段已从必需模式更改为可空模式”。我解决的方法是更改​​架构。将该字段从“必需”更改为“可空”