Лучшие инструменты Python ETL

Введение в ETL

ETL является сердцем любого проекта хранилища данных. Любой успешный проект данных будет включать в себя прием и/или извлечение большого количества данных (транзакций), некоторые из которых не будут должным образом отформатированы для своего конечного использования. К счастью для профессионалов в области данных, сообщество разработчиков Python создало широкий спектр инструментов с открытым исходным кодом, которые делают ETL проще. В статье будет приведен обзор лучших инструментов Python ETL, которые помогут Вам собирать, очищать и загружать ваши данные в хранилище данных в преобразованном виде (в нужном формате). Некоторые из этих пакетов позволяют вам управлять каждым шагом процесса ETL, в то время как другие хороши на определенном этапе ETL процесса. В любом случае, вы обязательно найдете что-то полезное из статьи.

Apache Airflow

Apache Airflow (или просто Airflow) — это платформа для создания, планирования и мониторинга рабочих процессов.

Когда рабочие процессы определяются как код, они становятся более понятными, управляемыми, тестируемыми при совместной разработке.

Используйте Airflow для создания рабочих процессов в виде направленных ациклических графов (DAG) задач. Планировщик Airflow выполняет ваши задачи, следуя указанным зависимостям. Богатые утилиты командной строки делают выполнение сложных операций на DAG проще. Богатый пользовательский интерфейс позволяет легко визуализировать конвейеры, работающие на производстве, отслеживать прогресс и устранять проблемы при необходимости.

Apache Spark & PySpark

Spark — это универсальная и высокопроизводительная кластерная вычислительная платформа. Spark технически не является инструментом Python, но API PySpark позволяет легко обрабатывать задания Spark в вашем workflow для Python.

PySpark предназначен для создания конвейеров машинного обучения и создания ETL для платформы анализа данных. В PySpark встроены всевозможные инструменты для обработки и преобразования данных, и он предназначен для параллельного выполнения вычислений, поэтому даже большие задания могут выполняться очень быстро. Он прекрасно масштабируется для действительно больших операций с данными, а работа через API PySpark позволяет вам писать краткий, читабельный и совместный код для ваших заданий ETL. Рассмотрите PySpark, если вам важна скорость и объем данных в ваших расчетах.

Обзор Spark

Apache Spark — это молниеносная среда обработки в реальном времени. Он выполняет вычисления в памяти для анализа данных в режиме реального времени. Этот подход стал очевидным, поскольку Apache Hadoop MapReduce выполнял только пакетную обработку и не имел функций обработки в реальном времени. Поэтому был представлен Apache Spark, поскольку он может выполнять потоковую обработку в режиме реального времени, а также может выполнять пакетную обработку.

Помимо обработки в реальном времени и пакетной обработки, Apache Spark поддерживает интерактивные запросы и итерационные алгоритмы. Apache Spark имеет свой собственный менеджер кластеров, где он может разместить свое приложение. Он использует Apache Hadoop для хранения и обработки. Он использует HDFS (Hadoop Distributed File system — распределенную файловую систему Hadoop) для хранения и может также запускать приложения Spark на YARN.

PySpark — Обзор

Apache Spark написан на языке программирования Scala. Для поддержки Python с помощью Spark сообщество Apache Spark выпустило инструмент PySpark. Используя PySpark, вы также можете работать с RDD на языке программирования Python. Именно благодаря библиотеке под названием Py4j они могут достичь этого.

PySpark предлагает PySpark Shell, который связывает Python API с ядром Spark и инициализирует контекст Spark. Большинство исследователей данных и аналитиков сегодня используют Python из-за его богатого набора библиотек. Интеграция Python с Spark является необходимостью для них.

SparkContext — это точка входа в любую функциональность Spark. Когда мы запускаем любое приложение Spark, запускается программа драйвера, которая выполняет основную функцию, и здесь запускается ваш SparkContext. Затем программа драйвера запускает операции внутри исполнителей на рабочих узлах. SparkContext использует Py4J для запуска JVM и создает JavaSparkContext.

petl

petl — это универсальный пакет Python для извлечения, преобразования и загрузки таблиц данных.
petl — это пакет Python для ETL (отсюда и название ‘petl’). Как и в случае с Pandas, petl позволяет пользователю создавать таблицы в Python, извлекая их из различных источников данных (csv, xls, html, txt, json и т.д.). И записывая их в выбранную вами базу данных или формат хранения. У petl много тех же возможностей, что и у pandas, но он разработан для работы с ETL и не включает встроенных функций анализа, поэтому он может подойти Вам, если вы заинтересованы исключительно в ETL.

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

Преобразования petl минимально используют системную память и могут масштабироваться до миллионов строк, если скорость не является приоритетом. Однако, если вы работаете с очень большими наборами данных и/или приложениями, для которых критически важна производительность, то рассмотрите другие пакеты, например, см. Pandas, pytables, bcolz и blaze.

Panoply

Panoply спроектирован, как полнофункциональное решение для хранения данных. С помощью Panoply можно реализовать ETL очень просто. Panoply обрабатывает каждый шаг процесса, упрощая прием данных из любого источника данных (от CSV до Amazon S3-контейнеров и до Google Analytics).

https://panoply.io/docs/collect-data/python-sdk/ — Python SDK на основе SQS для потоковой передачи данных в реальном времени на платформе Panoply. Этот SDK включает в себя строительные блоки для создания ваших собственных источников данных.

Pandas

Если вы использовали Python для работы с данными, вы, вероятно, знакомы с pandas, инструментарием для обработки и анализа данных. Если нет, то вы должны разузнать о pandas. Эта библиотека позволяет добавлять в Python фреймы данных в стиле R, что делает манипулирование, очистку и анализ данных гораздо проще, чем в сыром Python. Как инструмент ETL, pandas может обрабатывать каждый шаг процесса, позволяя извлекать данные из большинства форматов хранения и быстро и легко манипулировать данными в памяти. Когда вы обработаете данные, Pandas с легкостью запишет Ваш DataFrame в CSV, Microsoft Excel или базу данных SQL.

Pandas Python For Data Science cheat sheet

Bubbles

Bubbles — это популярная среда Python ETL, которая позволяет легко создавать ETL-конвейеры. Bubbles написана на Python, но на самом деле разработана, чтобы быть независимой от технологий. Он настроен для работы с объектами данных — представлениями наборов данных, являющихся ETL, чтобы максимизировать гибкость в конвейере ETL пользователя. Если в вашем конвейере ETL много узлов с поведением, зависящим от формата, Bubbles могут стать вашим решением. Однако репозиторий github не развивался активно с 2015 года, поэтому некоторые функции могут быть устаревшими.

Bonobo (Бонобо)

Bonobo — это облегченная ETL-инфраструктура с кодом в виде конфигурации для Python. Он имеет инструменты для построения конвейеров данных, которые могут обрабатывать несколько источников данных параллельно, и имеет расширение SQLAlchemy (в настоящее время в альфа-версии), которое позволяет подключать ваш конвейер напрямую к базам данных SQL. Bonobo спроектирован так, чтобы его было легко запустить, содержит UNIX-подобную атомную структуру для каждого процесса преобразования (Каждое преобразование имеет определенную, уникальную, небольшую и ограниченную цель). Эта библиотека должна быть доступна для всех, кто имеет базовый уровень владения Python, а также включает в себя визуализатор графика процесса ETL, который позволяет легко отслеживать ваш процесс.

Bonobo — это облегченная  среда Extract-Transform-Load (ETL) для Python 3.5+. 
Он предоставляет инструменты для построения конвейеров преобразования данных, использования простых примитивов Python и их параллельного выполнения.
Bonobo — швейцарский армейский нож для повседневных данных.

Используйте встроенные экстракторы (CSV, JSON, XML, XLS, …), официальные дополнения (SQL).

Есть встроенные классы для преобразования данных.

Luigi Луиджи

Luigi — это пакет Python с открытым исходным кодом, разработанный Spotify. Он разработан, чтобы упростить управление длительными пакетными процессами, поэтому он может выполнять задачи, выходящие далеко за рамки ETL, но он также делает ETL довольно хорошо. Luigi поставляется с веб-интерфейсом, который позволяет пользователю визуализировать задачи и обрабатывать зависимости. Концептуально он похож на GNU Make, но не только для Hadoop (хотя и облегчает работу Hadoop). Luigi может стать вашим ETL-инструментом, если у вас есть большие и длительные задания по обработке данных, которые просто необходимо выполнить.

Odo — Одо

Odo — это пакет Python, который позволяет легко перемещать данные между различными типами контейнеров. После установки Odo предоставляет единственную функцию, которая может переносить данные между структурами в памяти (списки, пустые массивы, dataframes pandas и т.д.), Форматами хранения (CSV, JSON, HDF5 и т.д.) И удаленными базами данных, такими как Postgres и Hadoop. Odo сконфигурирован для использования собственных возможностей загрузки этих CSV-баз данных, которые значительно быстрее, чем подходы, использующие чистый Python. Один из тестов разработчиков показывает, что Pandas работает в 11 раз медленнее, чем самый медленный нативный загрузчик CSV-to-SQL. Если вы обнаружите, что загружаете много данных из CSV в базы данных SQL, Odo может стать для вас инструментом ETL.

etlalchemy

etlalchemy — это легкий пакет Python, который управляет миграцией баз данных SQL. Проект был задуман, когда разработчик понял, что большая часть данных его организации хранится в базе данных Oracle 9i, которая не поддерживается с 2010 года. Программа etlalchemy была разработана для упрощения и ускорения миграции между реляционными базами данных с различными диалектами. Тем не менее, предостережение: этот пакет не будет работать в Windows и имеет проблемы с загрузкой в ​​MSSQL, что означает, что вы захотите посмотреть куда-нибудь еще, если ваш рабочий процесс включает в себя Windows и, например, Azure.

mETL

mETL — это инструмент Python ETL, который автоматически создает файл Yaml для извлечения данных из данного файла и загрузки в базу данных SQL. Может работать с широким спектром источников данных и целей, включая стандартные плоские файлы, Google Sheets и полный набор подключений SQL (включая Microsoft SQL Server). Недавние обновления предоставили некоторые твики для обхода замедлений, вызванных некоторыми драйверами Python SQL, поэтому этот пакет может быть вам полезен, если вы хотите, чтобы ваш процесс ETL был похож на Python, но быстрее.

Open Semantic ETL

Open Semantic ETL — это платформа Python с открытым исходным кодом для управления ETL, особенно из большого количества отдельных документов. Инфраструктура позволяет пользователю создавать конвейеры, которые могут сканировать целые каталоги файлов, анализировать их с помощью различных надстроек (в том числе, которые могут обрабатывать OCR для особенно сложных PDF-файлов) и загружать их в выбранную вами реляционную базу данных.

Mara

Mara — это библиотека Python, которая сочетает в себе облегченную среду ETL с хорошо разработанным веб-интерфейсом, который можно вставить в любое приложение Flask. Как и многие другие платформы, описанные здесь, Mara позволяет пользователю создавать конвейеры для извлечения и переноса данных. Mara использует PostgreSQL в качестве механизма обработки данных и использует преимущества многопроцессорного пакета Python для конвейерного выполнения. Разработчики описывают его как «на полпути между простыми сценариями и Apache Airflow», поэтому, если вы ищете что-то среднее между этими двумя крайностями, попробуйте Mara. Примечание. В настоящее время Mara не может работать в Windows.

riko

Хотя технически riko не является полноценным решением ETL, оно может выполнять большинство операций по извлечению данных и включает в себя множество функций, облегчающих извлечение потоков неструктурированных данных в Python. Инструмент был разработан, чтобы заменить ныне несуществующий Yahoo! Веб-приложение Pipes для разработчиков на чистом Python, имеющее как синхронные, так и асинхронные API. У riko достаточно небольшой вычислительный объем, встроенная поддержка RSS / Atom и чистая библиотека Python, поэтому он имеет некоторые преимущества по сравнению с другими приложениями для обработки потоков, такими как Huginn, Flink, Spark и Storm. Если вы обрабатываете много потоковых данных, попробуйте riko.

Carry

Carry — это пакет Python, который сочетает в себе SQLAlchemy и Pandas. Это полезно для миграции между CSV и распространенными типами реляционных баз данных, включая Microsoft SQL Server, PostgreSQL, SQLite, Oracle и другие. Используя Carry, можно переносить несколько таблиц параллельно, а сложные преобразования данных можно обрабатывать в процессе. Одна из отличительных особенностей Carry заключается в том, что он может автоматически создавать и сохранять представления на основе перенесенных данных SQL для дальнейшего использования пользователем.

locopy

Команда Capital One Open Source Projects разработала locopy , библиотеку Python для задач ETL, использующую Redshift и Snowflake, которая поддерживает множество драйверов и адаптеров Python DB для Postgres. Locopy также значительно упрощает загрузку и загрузку в / из сегментов S3. Если вы ищете инструмент, который облегчает ETL с Redshift и Snowflake, проверьте locopy.

etlpy

etlpy — это библиотека Python, предназначенная для оптимизации конвейера ETL, который включает в себя очистку веб-страниц и очистку данных. Тем не менее, большая часть документации на китайском языке, поэтому она не может быть вашим инструментом перехода, если вы не говорите по-китайски или если вам удобно полагаться на Google Translate. etlpy предоставляет графический интерфейс для разработки веб-сканеров / скребков и инструментов для очистки данных. После того, как вы спроектировали свой инструмент, вы можете сохранить его в виде XML-файла и передать его в механизм etlpy, который, как представляется, предоставляет словарь Python в качестве вывода. Это может быть ваш выбор, если вы хотите извлечь много данных, использовать графический интерфейс для этого и говорить по-китайски.

pygrametl

pygrametl — это еще одна среда Python для построения ETL-процессов. pygrametl позволяет пользователям создавать весь поток ETL в Python, но работает как с CPython, так и с Jython, поэтому он может быть хорошим выбором, если в вашем конвейере обработки ETL уже есть Java-код и / или драйверы JDBC.

Использованные источники для статьи

  1. Текст исходной статьи: https://blog.panoply.io/top-9-python-etl-tools-and-when-to-use-them
0 0 голоса
Рейтинг статьи
Шамаев Иван
Разработчик аналитических решений QlikView/Qlik Sense/Power BI; Python Data Scientist; Разработчик интеграционных решений на PHP, Python, JavaScript.
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x