Манипулировать большим количеством файлов для переформатирования в облаке Google - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть большое количество json-файлов в облачном хранилище Google, которые я хотел бы загрузить в Bigquery.Средний размер файла 5 МБ, не сжат.Проблема в том, что они не разделены новой строкой, поэтому я не могу загрузить их как есть в bigquery.Какой мой лучший подход здесь?Должен ли я использовать функции Google или подготовку данных или просто развернуть сервер и заставить его загрузить файл, переформатировать его и загрузить обратно в облачное хранилище, а затем в Bigquery?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Для этого можно использовать Поток данных .

Выберите шаблон «Текстовые файлы из облачного хранилища в BigQuery»:

Конвейер, который может читатьтекстовые файлы, хранящиеся в GCS, выполняют преобразование через пользовательскую функцию javascript и загружают результаты в BigQuery.Для этого конвейера требуется функция javascript и JSON, описывающий результирующую схему BigQuery.

Вам потребуется добавить UDF в Javascript, который преобразует JSON в JSON с новой строкой при создании задания.

Это позволит получить файлы из GCS, преобразовать их и автоматически загрузить в BigQuery.

0 голосов
/ 05 декабря 2018

Не сжимайте данные перед загрузкой в ​​Bigquery.Еще один предмет, 5 МБ, мал для Bigquery.Я хотел бы взглянуть на стратегии консолидации и, возможно, изменить формат файла при обработке каждого файла Json.

Вы можете использовать Dataprep, Dataflow или даже Dataproc.В зависимости от того, сколько файлов, это может быть лучшим выбором.Для чего-то большего, чем, скажем, 100 000 файлов размером 5 МБ потребуется одна из этих больших систем с большим количеством узлов.

Облачные функции могут занять слишком много времени для чего-то большего, чем несколько тысяч файлов.

Другой вариант состоит в том, чтобынаписать простую программу на Python, которая предварительно обрабатывает ваши файлы в облачном хранилище и напрямую загружает их в BigQuery.Мы говорим только о 20 или 30 строках кода, если вы не добавите консолидацию.5 МБ файл будет загружаться, обрабатываться и записываться примерно за 500 мс.Я не уверен насчет времени загрузки Bigquery.Для 50000 файлов размером 5 МБ от 12 до 24 часов для одного потока в большом экземпляре Compute Engine (вам нужна высокая пропускная способность сети).

Другой вариант - это запустить несколько вычислительных машин.Один движок помещает имена файлов N (примерно 4 или 16) для каждого сообщения в Pub / Sub.Затем несколько экземпляров Compute подписываются на одну и ту же тему и параллельно обрабатывают файлы.Опять же, это всего лишь еще 100 строк кода.

Если ваш проект состоит из многих миллионов файлов, пропускная способность сети и время вычислений будут проблемой, если время не является фактором.

...