DBHose для Apache Airflow
( )
( ( ) )\ ) ( ( /(
)\))( ' ( ( ) ( ( /( (()/( ( )\ )\()) (
((_)()\ ) ))\ )\ ( ( ( ))\ )\()) ( /(_)) )((_) ((_)\ ( ( ))\
_(())\_)() /((_) (( ) )\ )\ )\ ' /((_) (_))/ )\ (_))_ ((_)_ _((_) )\ )\ /((_)
\ \((_)/ /(_)) | | ((_) ((_) _((_)) (_)) | |_ ((_) | \ | _ ) | || | ((_) ((_) (_))
\ \/\/ / / -_) | | / _| / _ \ | ' ' | / -_) | _| / _ \ | |) | | _ \ | __ | / _ \ (_-< / -_)
\_/\_/ \___| |_| \__| \___/ |_|_|_| \___| \__| \___/ |___/ |___/ |_||_| \___/ /__/ \___|
Класс DBHose предоставляет универсальный интерфейс для переноса данных между различными источниками в Apache Airflow DAGs.
⚠️ Статус проекта
Проект находится в стадии бета-тестирования и может содержать ошибки. Используйте с осторожностью в production-средах.
Поддерживаемые СУБД
На данный момент работа с СУБД поддерживается только между следующими базами данных:
- ClickHouse
- Greenplum
- PostgreSQL
Описание
DBHose - это инструмент для безопасного и эффективного перемещения данных между:
- Файлами дампов
- Python итераторами
- DataFrame (Pandas/Polars)
- Поддерживаемыми СУБД (ClickHouse, Greenplum, PostgreSQL)
Класс включает встроенные проверки качества данных (Data Quality) и поддерживает различные методы перемещения данных.
Инициализация
DBHose(
table_dest: str,
connection_dest: str,
connection_src: str | None = None,
dq_skip_check: list[str] = [],
filter_by: list[str] = [],
drop_temp_table: bool = True,
move_method: MoveMethod = MoveMethod.replace,
custom_move: str | None = None,
compress_method: CompressionMethod = CompressionMethod.ZSTD,
timeout: int = DBMS_DEFAULT_TIMEOUT_SEC,
)
Параметры
table_dest(str) - целевая таблица для загрузки данныхconnection_dest(str) - подключение к целевой БД (должна быть одной из поддерживаемых: ClickHouse, Greenplum, PostgreSQL)connection_src(str, optional) - подключение к исходной БД (если отличается от целевой)dq_skip_check(list[str]) - список проверок качества данных для пропускаfilter_by(list[str]) - список колонок для фильтрации при перемещении данныхdrop_temp_table(bool) - удалять ли временную таблицу после операции (по умолчаниюTrue)move_method(MoveMethod) - метод перемещения данных (по умолчаниюMoveMethod.replace)custom_move(str, optional) - пользовательский SQL запрос для перемещения данныхcompress_method(CompressionMethod) - метод сжатия для дампов (по умолчаниюCompressionMethod.ZSTD)timeout(int) - таймаут операций с БД в секундах (по умолчаниюDBMS_DEFAULT_TIMEOUT_SEC= 300)
Методы
Основные методы загрузки данных
from_file(fileobj: BufferedReader)
Загрузка данных из файла дампа.
Параметры:
fileobj(BufferedReader) - файловый объект для чтения дампа
from_iterable(dtype_data: Iterable[Any])
Загрузка данных из Python итератора.
Параметры:
dtype_data(Iterable[Any]) - итерируемый объект с данными
from_frame(data_frame: PDFrame | PLFrame)
Загрузка данных из DataFrame (Pandas или Polars).
Параметры:
data_frame(PDFrame | PLFrame) - DataFrame в формате Pandas или Polars
from_dmbs(query: str | None = None, table: str | None = None)
Загрузка данных из СУБД с использованием SQL запроса или прямой выгрузки из таблицы.
Параметры:
query(str, optional) - SQL запрос для выборки данныхtable(str, optional) - имя таблицы для прямой выгрузки
Вспомогательные методы
create_temp()
Создание временной таблицы для промежуточного хранения данных.
drop_temp()
Удаление временной таблицы.
dq_check(table: str | None = None)
Запуск проверок качества данных.
Параметры:
table(str, optional) - имя исходной таблицы для сравнения данных
to_table()
Перемещение данных из временной таблицы в целевую.
Пример использования в DAG
from datetime import datetime
from airflow import DAG
from airflow.operators.python import PythonOperator
from dbhose_airflow import (
DBHose,
MoveMethod,
)
def transfer_data():
# Перенос данных из PostgreSQL в ClickHouse
dbhose = DBHose(
table_dest="target_table",
connection_dest="clickhouse_conn",
connection_src="postgres_conn",
move_method=MoveMethod.replace
)
dbhose.from_dmbs(table="source_table")
with DAG('data_transfer_dag', start_date=datetime(2025, 10, 27)) as dag:
transfer_task = PythonOperator(
task_id='transfer_data',
python_callable=transfer_data
)
Ограничения бета-версии
- Поддерживаются только ClickHouse, Greenplum и PostgreSQL
- Возможны ошибки при работе с большими объемами данных
- API может изменяться в будущих версиях
- Не все функции могут быть полностью протестированы
- Документация может быть неполной
Особенности
- Автоматическое создание временных таблиц - данные сначала загружаются во временную таблицу
- Проверки качества данных - встроенные проверки перед финальным перемещением
- Гибкие методы перемещения - поддержка различных стратегий обновления данных
- Поддержка множества источников - файлы, DataFrame, СУБД
- Логирование операций - детальное логирование всех этапов процесса
Требования
- Apache Airflow
- Подключения к поддерживаемым БД, настроенные в Airflow
Примечания
- Класс использует временные таблицы для обеспечения целостности данных
- Все операции включают проверки качества данных, которые можно кастомизировать
- Поддерживаются различные методы сжатия для оптимизации передачи данных
- В бета-версии рекомендуется тщательно тестировать все сценарии использования
Сообщения об ошибках
При обнаружении ошибок или неожиданного поведения, пожалуйста, сообщайте о них для улучшения стабильности проекта
Metadata
Release files for dbhose-airflow 0.1.0.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dbhose_airflow-0.1.0.7-py3-none-any.whl | Python 3 | none | any | Details |
Release files / dbhose_airflow-0.1.0.7-py3-none-any.whl
| Download URL | dbhose_airflow-0.1.0.7-py3-none-any.whl |
|---|---|
| Size | 33.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3e671dec40a65a4d3f9f07d2e4a97e7959dcde19e464b6435c1eb731a9646e8f
|
|
BLAKE2b-256 checksum How to use checksums |
2e2ee63ee6b32157e29d5ce36ea7c073885efe1c4ffd25f12ee4315a353e4dc9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|