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 数据上传错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python修复在bigquery中上传csv文件

BigQuery - 在插入表时调用查询

GoogleApiException:流式传输到 BigQuery 时,Google.Apis.Requests.RequestError 后端错误 [500]

sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu

BigQuery:无效日期错误

在 Google BigQuery 中创建 CSV 表的困难