bigquery中的必填字段如何在选择中可以为空?

时间:2017-05-16 21:26:58

标签: google-bigquery

我用bigquery做了一些元编程,注意到了一些我没想到的东西。

我正在使用此查询:

SELECT * FROM `bigquery-public-data.samples.shakespeare` LIMIT 1000

应该违反公共数据集。如果您分析该查询,您会看到架构如下所示:

"schema": {
"fields": [
 {
  "name": "word",
  "type": "STRING",
  "mode": "NULLABLE"
 },
 {
  "name": "word_count",
  "type": "INTEGER",
  "mode": "NULLABLE"
 },
 {
  "name": "corpus",
  "type": "STRING",
  "mode": "NULLABLE"
 },
 {
  "name": "corpus_date",
  "type": "INTEGER",
  "mode": "NULLABLE"
 }
]
},

这一开始可能看起来不错,但是如果你查看bigquery-public-data.samples.shakespeare的表定义,你会注意到表中需要该选择中的每个字段,那么为什么它最终可以在select的架构?

某些背景信息:

我正在研究一个F#类型的提供程序,我尝试将所有值编码为尽可能正确。这意味着可以作为选项类型为空,而作为常规类型则不可为空。如果我总是可以为空,那么对于那些无法空洞的字段来说,它会变得更加麻烦。

1 个答案:

答案 0 :(得分:0)

即使表格架构中的字段为REQUIRED,查询也可以执行将非NULL值转换为NULL值的转换,因此查询结果可能具有不同的架构(两者都相对于可空性和数据类型)然后原始表有什么。