R 到 BigQuery 数据上传错误
Posted
技术标签:
【中文标题】R 到 BigQuery 数据上传错误【英文标题】:R to BigQuery Data Upload Error 【发布时间】:2018-07-05 00:13:20 【问题描述】:我正在使用 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 似乎在自动检测数据格式,并错误地将具有“00487”等值的 NewID 列视为数字,而实际上它是一个字符串。当我将“x”字符附加到 NewID 值时,错误消失并且上传功能完美。使用“bigrquery”包上传数据时,有什么方法可以禁用自动检测?
【问题讨论】:
也许在上传之前使用as.character
将NewID列转换为字符类?
它已经是 R 中的一个字符。否则它不能有前导零。 BigQuery 表中的对应列是 STRING 数据类型。问题在于忽略显式数据类型的自动检测;我不知道如何关闭该功能。
【参考方案1】:
同一库中的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
运行相同的命令,但失败了。
【讨论】:
谢谢!这很有帮助。 我在使用上述代码时收到错误Error: Source URI must be a Google Cloud Storage location
。我在 GCS 上创建了一个存储桶。如何指示 R 指定源。谢谢。
@PriyankaIndapurkar 您应该按照here 的说明提供一个完全限定的网址。你是如何指定 source_url 参数的?以上是关于R 到 BigQuery 数据上传错误的主要内容,如果未能解决你的问题,请参考以下文章
GoogleApiException:流式传输到 BigQuery 时,Google.Apis.Requests.RequestError 后端错误 [500]
sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu