Получить массивный CSV-файл из GCS в BQ - PullRequest
0 голосов
/ 08 января 2019

У меня есть очень большой файл CSV (скажем, 1 ТБ), который мне нужно получить из GCS на BQ. Хотя в BQ действительно есть CSV-загрузчик, имеющиеся у меня CSV-файлы довольно нестандартны и не могут нормально загружаться в BQ без его форматирования.

Обычно я загружал файл csv на сервер, чтобы «обработать» его, и сохранял его либо непосредственно в BQ, либо в avro-файле, который BQ может легко проглотить. Тем не менее, файл (ы) довольно большой, и вполне возможно (и, вероятно), что у меня не было бы хранилища / памяти для пакетной обработки без написания большого количества кода для его оптимизации / потоковой передачи.

Это хороший вариант использования Cloud Dataflow? Есть ли уроки, как получить файл формата "X" из GCS в BQ? Любые учебные указатели или примеры скриптов для этого были бы хороши.

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Вы всегда можете перенести из хранилища непосредственно в таблицу BQ:

bq --location=US load --[no]replace --source_format=CSV dataset.table gs://bucket/file.csv [schema]

Здесь [schema] может быть встроенной схемой вашего CSV-файла (например, id:int,name:string,..) или путем к файлу схемы JSON (доступно локально).

Согласно документации BQ, они пытаются распараллелить большие CSV-нагрузки в таблицы. Конечно, существует верхняя граница: максимальный размер несжатого (CSV) файла, который будет загружен из GCS в BQ, должен быть <= 5 ТБ, что намного выше ваших требований. Я думаю, тебе должно быть хорошо с этим. </p>

0 голосов
/ 09 января 2019

Я бы лично использовал Dataflow (не Dataprep) и писал простой конвейер для параллельного чтения файла, его очистки / преобразования и, наконец, записи в BigQuery. Это довольно просто. Вот пример одного в моем репозитории GitHub. Хотя это на Java, вы можете легко перенести его на Python. Примечание: он использует функцию «шаблоны» в потоке данных, но это можно изменить с помощью одной строки кода.

Если поток данных находится вне таблицы, другой вариант может заключаться в использовании странного / неиспользованного разделителя и считывании всей строки в BigQuery. Затем используйте SQL / Regex / UDF для очистки / преобразования / анализа. См. здесь (предложение от Фелипе). Мы делали это много раз в прошлом, и, поскольку вы находитесь в BigQuery, он очень хорошо масштабируется.

0 голосов
/ 09 января 2019

Я хотел бы рассмотреть возможность использования Cloud Dataprep .

Dataprep может импортировать данные из GCS, очищать / изменять данные и экспортировать в BigQuery. Одна из функций, которая мне нравится, заключается в том, что все можно сделать визуально / интерактивно, чтобы я мог видеть, как данные преобразуются.

Начните с подмножества ваших данных, чтобы увидеть, какие преобразования необходимы, и дать себе некоторую практику перед загрузкой и обработкой ТБ данных.

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