2016-08-23 5 views
0

Я пытаюсь загрузить файл JSON в GoogleBigquery с помощью сценария на https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/bigquery/api/load_data_by_post.py с очень небольшими изменениями. Я добавилBigQuery сценарий стенает большой файл

,chunksize=10*1024*1024, resumable=True)) 

к MediaFileUpload.

Сценарий отлично работает для образца файла с несколькими миллионами записей. Фактический файл составляет около 140 ГБ с примерно 200 000 000 записей. insert_request.execute() всегда терпит неудачу с

socket.error: `[Errno 32] Broken pipe` 

через полчаса или около того. Как это можно зафиксировать? Каждая строка меньше 1 КБ, поэтому она не должна быть проблемой квоты.

+0

такой же вопрос здесь. http://stackoverflow.com/questions/38971523/insert-large-amount-of-data-to-bigquery-via-bigquery-python-library –

+0

Исправлено форматирование и опечатки – Prune

+0

Привет, Джаядеван, я в команде разработчиков BigQuery , и если вы хотите опубликовать проект и идентификатор задания, я мог бы взглянуть и посмотреть, что-то выделяется в наших журналах. – Tib51

ответ

2

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

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

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

Обновление: Говоря с командой инженеров, POST должен работать, если вы попробуете меньший chunksize.

+1

Некоторые наблюдения, если это кому-то помогает. Я не думаю, что это вопрос. Когда я ранее тестировал пилот, имея всего 10 миллионов записей, я сохранил его на уровне 100 МБ, и он сработал. С новым полным файлом данных я получил ошибку, упомянутую выше. Затем я переключился на сжатый формат и столкнулся с проблемой квот. Затем я разбил сжатый файл на куски, и он работает, но занимает много времени. Следующий шаг - разбить несжатый файл на куски и попробовать это. Спасибо за все предложения. – Jayadevan

+0

@Jayadevan У меня также такой же тип выпуска. Для меня 8.5mb csv требуется много времени, застрявшего на этой линии. https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/bigquery/api/load_data_by_post.py#L80 Любая идея? У вас есть ссылочный URL для вашего рабочего кода? –

+0

Вы использовали chunk_size? Теперь у меня есть mediafileupload в блоке try/except, чтобы была сделана еще одна попытка. Лучше проверить условие ошибки и иметь конкретное предложение исключения. Вот как я теперь пытаюсь выполнить код: job = insert_request.execute() за исключением: job = insert_request.execute() Вы сказали «застряли». Вы получаете сообщение об ошибке или что-то вроде повешенного? – Jayadevan