我正在使用R包“ bigrquery”将R数据框中的数据上传到现有的BigQuery表中,如下所示:
mybq = bq_table(project='...', dataset='...', table=...)
bq_table_upload(x=mybq, values=..., create_disposition='CREATE_NEVER',
write_disposition='WRITE_APPEND')
但是我收到以下错误消息:
错误:无效的架构更新。字段NewID的类型已从“ STRING”更改为“ INTEGER”
BigQuery似乎正在自动检测数据格式,并且错误地认为NewID列实际上是一个字符串,而该列的值类似于“ 00487”。当我在NewID值后附加一个“ x”字符时,该错误就会消失,并且上传功能会正常运行。使用“ bigrquery”包上传数据时,有什么方法可以禁用自动检测?
答案 0 :(得分:2)
同一库中的bq_perform_load
函数应该是解决此问题的方法。在此函数中,您可以使用参数fields
指定架构,这样Bigquery不会像here那样自动检测架构。
我进行了测试,并且最终成功了。我创建了一个包含两列(STRING,STRING)的表,这是我的源数据:
0017 0015
0123 1234
1022 1202
我在R中运行以下命令以使其工作:
bq_perform_load('MY_PROJECT.MYDATASET.MYTABLE', "MY_GCS_OBJECT_LINK", nskip = 0, fields = list(bq_field("test1", "string"),bq_field("test2", "string")) , source_format = "CSV",create_disposition = "CREATE_NEVER", write_disposition = "WRITE_APPEND")
注意::我第一次尝试使用fields = NULL
运行相同的命令,但失败了。