BigQuery: ошибка PartialFailureError при вставке таблицы

# #node.js #google-bigquery

Вопрос:

Я пытаюсь вставить строку данных в таблицу BigQuery следующим образом:

 await bigqueryClient
          .dataset(DATASET_ID)
          .table(TABLE_ID)
          .insert(row);
 

Но я получаю PartialFailureError при развертывании облачной функции.

Схема таблицы содержит поля имя (строка) и кампании (запись/повторение), которые я создал вручную с консоли.

 hotel_name  STRING  NULLABLE    
campaigns   RECORD  REPEATED    
  campaign_id   STRING  NULLABLE    
  platform_id   NUMERIC NULLABLE    
  platform_name STRING  NULLABLE    
  reporting_id  STRING  NULLABLE
 

И данные, которые я вставляю, — это объект, подобный этому:

       const row = {
        hotel_name: hotel_name,//string
        campaigns: {
            id: item.id,//string
            platform_id: item.platform_id,//int
            platform_name: item.platform_name,//string
            reporting_id: item.reporting_id,//string
          },
      };
 

Зарегистрированные ошибки не дают большого представления об этой проблеме.

Ответ №1:

Согласно моему тесту, кажется, что здесь есть 2 ошибки. Во-первых, у вас есть campaign_id схема в то время id как в JSON.

2-я вещь связана с форматом данных ПОВТОРНОГО режима в JSON. В документации упоминается следующее:

. Обратите внимание, что addresses столбец содержит массив значений (обозначается [ ] ). Несколько адресов в массиве являются повторяющимися данными. Несколько полей внутри каждого адреса являются вложенными данными.

Это не так прямо в упомянутом документе (возможно, его можно найти где-то еще), однако при использовании повторного режима следует использовать скобки [] .

Я коротко протестировал его на своей стороне, и, похоже, он должен работать так:

 const row = {
        hotel_name: hotel_name,//string
        campaigns: [ {
            campaign_id: item.id,//string
            platform_id: item.platform_id,//int
            platform_name: item.platform_name,//string
            reporting_id: item.reporting_id,//string
          }, ]
      };
 

Комментарии:

1. Привет @DeveloperHub. Вам удалось заставить его работать?

Ответ №2:

Эти ошибки-отстой. Фактическую информацию о том, что пошло не так, можно найти в errors свойстве PartialFailureError. В https://www.atdatabases.org мы переформатируем ошибку, чтобы упростить это, используя: https://github.com/ForbesLindesay/atdatabases/blob/0e1a033264aac33deaff2ab753796049e623ab86/packages/bigquery/src/implementation/BigQueryDriver.ts#L211