2016-08-16 2 views
6

У меня есть большие файлы csv и файлы excel, где я их читаю и создаю необходимый скрипт таблицы создания динамически в зависимости от полей и типов, которые он имеет. Затем вставьте данные в созданную таблицу.Вставить большой объем данных в BigQuery через библиотеку bigquery-python

Я прочитал this и понял, что должен отправить их с jobs.insert() вместо tabledata.insertAll() для большого количества данных.

Так я его называю (работает для небольших файлов, не больших).

result = client.push_rows(datasetname,table_name,insertObject) # insertObject is a list of dictionaries 

При использовании библиотеки push_rows он дает эту ошибку в окнах.

[Errno 10054] An existing connection was forcibly closed by the remote host 

и это в ubuntu.

[Errno 32] Broken pipe 

Так что, когда я прошел через BigQuery-Python код использует table_data.insertAll().

Как это сделать с помощью этой библиотеки? Я знаю, что мы можем загружать через хранилище Google, но мне нужен прямой метод загрузки.

ответ

2

При обработке больших файлов не используется потоковая передача, а пакетная загрузка: потоковая передача будет легко обрабатывать до 100 000 строк в секунду. Это очень хорошо для потоковой передачи, но не для загрузки больших файлов.

Образец кода, связанный с правильной вещью (пакет вместо потоковой передачи), поэтому мы видим другую проблему: этот примерный код пытается загрузить все эти данные прямо в BigQuery, но загрузка через POST-часть не выполняется , gsutil имеет более надежный алгоритм загрузки, чем простой POST.

Решение: вместо загрузки больших фрагментов данных через POST сначала выполните их в Google Cloud Storage, а затем сообщите BigQuery для чтения файлов из GCS.

Смотрите также BigQuery script failing for large file

+0

Вы просто добавить ссылку на ОП ?! –

+1

упс, исправление рекурсии! –

+0

@FelipeHoffa gsutil можно использовать внутри кода python? Возникли некоторые проблемы с типами столбцов, когда вы напрямую указываете путь к файлу csv и загружаете его. поэтому я могу прочитать csv и соответственно направить поля. Не существует способа вставить объект (может быть список словарей) в таблицу после того, как я их брошу? –

Смежные вопросы