Как получить только ошибки из метода insert_rows_from_dataframe в Bigquery Client? - PullRequest
2 голосов
/ 06 марта 2020

Я использую метод client.insert_rows_from_dataframe для вставки данных в мою таблицу.

obj = client.insert_rows_from_dataframe(table=TableRef, dataframe=df)

Если ошибок нет, obj будет пустым списком списков типа

> print(obj)
[[] [] []]

Но я хочу знать, как выводить сообщения об ошибках, если при вставке возникают ошибки?

Я пытался

obj[["errors"]] ? 

, но это не правильно. Пожалуйста, помогите.

1 Ответ

2 голосов
/ 06 марта 2020

Для достижения желаемых результатов вы должны установить для DataFrame заголовок, идентичный заголовку в вашей схеме. Например, если ваша схема в BigQuery имеет поля index и name , ваш DataFrame должен иметь эти два столбца.

Давайте рассмотрим пример ниже:

  1. Я создал таблицу в BigQuery с именем insert_from_dataframe, которая содержит поля index, name и number, соответственно INTEGER, STRING и INTEGER, все они НЕОБХОДИМЫ.
  2. В На изображении ниже вы можете видеть, что вставка не вызывает ошибок. На втором изображении мы видим, что данные были вставлены.

enter image description here Нет ошибок повышен



enter image description here

Данные введены успешно



После этого я удалил номер столбца для последней строки с теми же данными. Как вы можете видеть ниже, когда я пытался увеличить sh до BigQuery, я получил ошибку.

enter image description here

Учитывая это, я хотел бы подчеркнуть два пункта:

  1. Возвращенная структурированная ошибка - список списков ([], [], [], ...]). Причина этого в том, что ваши данные должны быть помещены в чанков (подмножества ваших данных). В используемой функции вы можете указать, сколько строк будет иметь каждый чанк, используя параметр chunk_size=<number_of_rows>. Предположим, что ваши данные имеют 1600 строк, а размер ваших блоков равен 500. Ваши данные будут разделены на 4 блока. Следовательно, объект, возвращаемый после запроса вставки, будет состоять из 4 списков внутри списка, где каждый из четырех списков связан с одним чанком. Также важно сказать, что если строка не проходит процесс, все строки внутри одного блока не будут вставлены в таблицу.
  2. Если вы используете строковые поля, вам следует обратить внимание на вставленные данные. Иногда Pandas читает нулевые значения как пустые строки, и это приводит к неправильной интерпретации данных механизмом вставки. Другими словами, возможно, что у вас есть пустые строки, вставленные в вашу таблицу, в то время как ожидаемый результат будет ошибкой, говорящей, что поле не может быть null.

Наконец, я хотел бы опубликовать Вот несколько полезных ссылок для этой проблемы:

  1. Документация клиента BigQuery
  2. Работа с пропущенными значениями в Pandas

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...