Лучший подход для преобразования данных BigQuery - PullRequest
0 голосов
/ 08 января 2020

У меня уже есть терабайты данных, хранящихся в BigQuery, и я хотел бы выполнить для них тяжелые преобразования данных.

Учитывая COSTS и PERFORMANCE, какой наилучший подход вы предложите, ребята, выполнить эти преобразования в будущем использование этих данных в BigQuery?

Я рассматриваю несколько вариантов:
1. Считать необработанные данные из DataFlow и затем загрузить преобразованные данные обратно в BigQuery?
2. Сделать это напрямую из BigQuery?

Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 08 января 2020

Я записал некоторые наиболее важные вещи, касающиеся производительности, вы можете найти там соображения относительно вашего вопроса об использовании DataFlow.

Лучшие практики, касающиеся производительности :

  • Выбор формата файла:

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

Загрузка данных из сжатых файлов, особенно CSV и JSON будет медленнее, чем загрузка данных в другом формате. И причина в том, что, поскольку сжатие Gzip не делится на части, необходимо взять этот файл, загрузить его в слот внутри BQ, а затем выполнить декомпрессию и затем, наконец, распараллелить загрузку.

**FASTER**
Avro(Compressed)
Avro(Uncompressed)
Parquet/ORC
CSV
JSON
CSV (Compressed)
JSON(Compressed
**SLOWER**
  • ELT / ETL:

После загрузки данных в BQ вы можете подумать о преобразованиях (ELT или ETL). Итак, в общем, вы хотите предпочесть ELT, а не ETL, где это возможно. BQ очень масштабируем и может обрабатывать большие преобразования на тонне данных. ELT также немного проще, потому что вы можете просто написать несколько SQL запросов, преобразовать некоторые данные и затем перемещать данные между таблицами, и вам не придется беспокоиться об управлении отдельным приложением ETL.

  • Необработанные и промежуточные таблицы:

После того, как вы начали загружать данные в BQ, как правило, в своем хранилище, вы захотите использовать необработанные и промежуточные таблицы перед публикацией в таблицах отчетов. Необработанная таблица, по сути, содержит полный ежедневный экстракт или полную загрузку загружаемых данных. В этом случае промежуточная таблица - это, по сути, ваша таблица сбора данных изменений, поэтому вы можете использовать запросы или DML для внесения этих данных в промежуточную таблицу и получения полной истории всех вставляемых данных. И, наконец, ваши таблицы отчетов будут загружены для пользователей sh.

  • Ускорение конвейеров с помощью DataFlow:

Когда вы ' Получая потоковые загрузки действительно сложных пакетных загрузок (которые на самом деле не вписываются в SQL), вы можете использовать DataFlow или DataFusion для ускорения этих конвейеров и выполнять более сложные действия с этими данными. И если вы начинаете с потоковой передачи, я рекомендую использовать шаблоны DataFlow - Google предоставляет их для загрузки данных из разных мест и перемещения данных. Вы можете найти эти шаблоны в пользовательском интерфейсе DataFlow, внутри кнопки Create Job from Template, вы найдете все эти шаблоны. И если вы обнаружите, что он в основном соответствует вашему варианту использования, но хотите сделать одно небольшое изменение, все эти шаблоны также имеют открытый исходный код (так что вы можете go сделать репозиторий, изменить код в соответствии с вашими потребностями).

  • Разделение:

Разделение в BQ физически разделяет ваши данные на диске, основываясь на времени приема или на основе столбца в ваших данных. Эффективно запрашивайте те части таблицы, которые вам нужны. Это обеспечивает огромные преимущества с точки зрения затрат и производительности, особенно для больших таблиц фактов. Всякий раз, когда у вас есть таблица фактов или временная таблица, используйте столбец раздела в измерении даты.

  • Кластер часто используемых полей:

Кластеризация позволяет физически упорядочивать данные в пределах раздел. Таким образом, вы можете сделать кластеризацию одним или несколькими ключами. Это обеспечивает огромные преимущества производительности при правильном использовании.

  • Резервирования BQ:

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

Лучшие практики по экономии затрат вы можете найти в официальной документации .

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

...