Как с помощью библиотеки bigrquery вставить в BigQuery неповторяющиеся записи?

Я пытаюсь вставить в BigQuery неповторяющуюся запись, но получаю сообщение об ошибке Array specified for non-repeated field: record..

У меня вопрос: как вставить в BigQuery неповторяющиеся записи с помощью библиотеки bigrquery?

Если у меня есть следующая схема:

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 с помощью jsonlite::stream_out(), но не использует аргумент auto_unbox = TRUE, в результате чего получаются массивы, а не объекты. В результате в BigQuery отправляется следующий JSON с разделителями новой строки:

{"record": [1]}
{"record": ["B"]}

Правильный NDJSON, который должен быть отправлен в BigQuery, я считаю, должен быть:

{"record": {"a": 1, "b", "B"}}

У кого-нибудь была эта проблема раньше или есть идеи, как я могу ее решить?


person Rhys Jackson    schedule 02.10.2019    source источник


Ответы (1)


Вы должны попробовать следующее, где вы установили mode = "REPEATED":

bqSchema <- bq_fields(list(
  bq_field(name = "record", type = "RECORD", mode = "REPEATED",
           fields = list(bq_field(name = "a", type = "INTEGER"),
                         bq_field(name = "b", type = "STRING")
                         )
           )
 ))
person Alvaro Pabon    schedule 26.05.2020
comment
Спасибо за ваше предложение. Однако формат данных, которые я хотел бы загрузить, не является повторяющимся полем записей. Такое ощущение, что этот ответ скорее скрывает ошибку, чем решает проблему. - person Rhys Jackson; 05.06.2020