【发布时间】:2019-10-02 21:33:55
【问题描述】:
我正在尝试将非重复记录插入 BigQuery,但一直收到错误 Array specified for non-repeated field: record.。
我的问题是:如何使用 bigrquery 库将非重复记录插入 BigQuery?
如果我有以下架构:
bqSchema <- bq_fields(list(
bq_field(name = "record", type = "RECORD", fields = list(
bq_field(name = "a", type = "INTEGER"),
bq_field(name = "b", type = "STRING")
))
))
还有这个数据框:
df <- tibble(
record = list(
a = 1,
b = "B"
)
)
如下插入数据会导致 BigQuery 出现错误:
bq_perform_upload(bqTableObj, df, fields = bqSchema)
# Array specified for non-repeated field: record
我认为这部分是因为 bigrquery converts the dataframe to JSON 和 jsonlite::stream_out(),但不使用参数 auto_unbox = TRUE,导致数组,而不是对象。这会导致以下以换行符分隔的 JSON 被发送到 BigQuery:
{"record": [1]}
{"record": ["B"]}
我认为应该发送到 BigQuery 的正确 NDJSON 应该是:
{"record": {"a": 1, "b", "B"}}
以前有没有人遇到过这个问题,或者有什么想法可以解决这个问题?
【问题讨论】: