我用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#类型的提供程序,我尝试将所有值编码为尽可能正确。这意味着可以作为选项类型为空,而作为常规类型则不可为空。如果我总是可以为空,那么对于那些无法空洞的字段来说,它会变得更加麻烦。
答案 0 :(得分:0)
即使表格架构中的字段为REQUIRED
,查询也可以执行将非NULL
值转换为NULL
值的转换,因此查询结果可能具有不同的架构(两者都相对于可空性和数据类型)然后原始表有什么。