Google bigquery json的bigquery loadJob-强制在模式自动检测中将字段设置为字符串

Google bigquery json的bigquery loadJob-强制在模式自动检测中将字段设置为字符串,google-bigquery,Google Bigquery,如果在开始时json包含 “标签”:“foo” 后来是 “标签”:“123” bigquery返回 Invalid schema update. Field label has changed type from STRING to INTEGER 虽然它是“123”,而不是123 文件正在加载 自动检测:真 在应用自动检测时,是否有方法强制bigquery将任何字段设置为字符串,或者唯一的方法是使用csv?通过扫描多达100行数据作为代表性样本,尽最大努力识别数据类型。对于它是哪种类型,没

如果在开始时json包含

“标签”:“foo”

后来是

“标签”:“123”

bigquery返回

Invalid schema update. Field label has changed type from STRING to INTEGER 
虽然它是“123”,而不是123

文件正在加载

自动检测:真

在应用自动检测时,是否有方法强制bigquery将任何字段设置为字符串,或者唯一的方法是使用csv?

通过扫描多达100行数据作为代表性样本,尽最大努力识别数据类型。对于它是哪种类型,没有办法给出见解。您可以考虑手动为您的用例指定架构。

UDATE:

我已经测试过加载一个只有
{“label”:“123”}
的文件,它被识别为
INTEGER
。因此,无论是否有引号,自动检测都会将
“123”
识别为
INGETER
。对于您的情况,您可以从文档中解释的现有表中考虑:

注意:您可以通过以下方式查看JSON格式的现有表的模式: 输入以下命令:bq show--format=prettyjson [数据集][表]


并将其用于进一步的动态载荷

谢谢。是的,问题是每个json都是动态的,可能包含新元素,这就是自动检测配置的原因。一旦bigquery已经从“history”中将元素的类型确定为字符串,为什么它不能再将新值视为字符串,即使它看起来像一个整数。此外,该值包含引号:(@ShaharT Auto-detection解释
“123”
作为
INTEGER
加载到BigQuery时,您应该为JSON文件指定模式。请注意,您可以从现有表中导出模式。有关详细信息,请参阅我的更新答案。问题是,在第一个值中,BigQuery将其作为字符串加载,在下一个JSON加载中,我希望BigQuery将其强制为字符串(因为它之前已经自动检测到了)我认为每个加载作业都是独立处理的,因此自动检测将再次应用于每个加载。因此,如果某些加载在确定架构的100行样本中只有数字,它将检测字段为
INTEGER
(无论在上一次加载中是否将其检测为
STRING
)。自动检测是尽最大努力完成的,您可以在本例中手动指定架构。