【问题标题】:R to BigQuery Data Upload ErrorR 到 BigQuery 数据上传错误
【发布时间】: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 数据类型。问题在于忽略显式数据类型的自动检测;我不知道如何关闭该功能。

标签: r google-bigquery


【解决方案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 参数的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多