我正在使用 R 包“bigrquery”将数据从 R 数据框上传到现有的 BigQuery 表中,如下所示:
mybq = bq_table(project='...', dataset='...', table=...)
bq_table_upload(x=mybq, values=..., create_disposition='CREATE_NEVER',
write_disposition='WRITE_APPEND')
Run Code Online (Sandbox Code Playgroud)
但我是以下错误消息:
错误:无效的架构更新。字段 NewID 的类型已从 STRING 更改为 INTEGER
BigQuery 似乎在自动检测数据格式,并错误地认为 NewID 列(其值类似于“00487”)是数字,而实际上它是一个字符串。当我将“x”字符附加到 NewID 值时,错误消失并且上传功能完美。使用“bigrquery”包上传数据时,有没有办法禁用自动检测?
将bq_perform_load在同一个库函数应该是一个解决方案。在此函数中,您可以使用参数指定架构,fields因此 Bigquery 不会按照此处的说明自动检测架构。
我进行了测试,它对我有用。我创建了一个包含两列(STRING、STRING)的表,这是我的源数据:
0017 0015
0123 1234
1022 1202
Run Code Online (Sandbox Code Playgroud)
我在 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")
Run Code Online (Sandbox Code Playgroud)
注意:我第一次尝试运行相同的命令,fields = NULL但失败了。