Кастомный коннектор OpenMetadata для интеграции с Qlik Sense (on-premise), адаптированный под инфраструктуру Казахтелекома.
- Извлекает метаданные дашбордов, листов и чартов из Qlik Sense через WebSocket (Qlik Engine JSON API)
- Импортирует дата-модели (таблицы и поля) приложений Qlik
- Строит data lineage: БД-таблицы → Qlik DataModel → Dashboard
- Парсит Qlik Load Script для извлечения источников данных (
FROM/JOIN) - Поддерживает SSL/TLS-аутентификацию через сертификаты
- Фильтрует черновые дашборды по настройкам конфигурации
- Python 3.x
- OpenMetadata Ingestion SDK
- Qlik Engine JSON API (WebSocket / WSS)
- Docker, Airflow
- Pydantic (модели данных)
- spaCy (
en_core_web_md)
Openmetadata/ ├── Dockerfile # Docker-образ ingestion-контейнера ├── docker-compose-postgres.yml # Полный стек OpenMetadata на Postgres ├── docker-compose.override.yml # Оверрайд для docker-compose ├── sitecustomize.py # Патч SSL/TLS для Python в Airflow ├── README-patched-ingestion.md # Инструкция по патчу ingestion ├── certs_qlik/ # SSL-сертификаты для Qlik Sense └── om_custom_qlik_kz/ ├── setup.py # Пакетная конфигурация (om-custom-qlik-kz) └── connector/ ├── init.py ├── qlik_kz_client.py # WebSocket-клиент Qlik Engine API ├── qlik_kz_source.py # Основной ingestion-источник ├── qlik_kz_models.py # Pydantic-модели данных ├── qlik_kz_connection.py # Подключение и тест-соединение ├── qlik_kz_constants.py # JSON-RPC запросы к Qlik └── qlik_kz_service_spec.py # Спецификация сервиса для OpenMetadata
OpenMetadata Ingestion Pipeline │ ▼ QlikSenseKazakhtelecomSource ← qlik_kz_source.py │ ▼ QlikSenseKazakhtelecomClient ← qlik_kz_client.py (WebSocket / SSL) │ ▼ Qlik Sense Engine API
Основные возможности ingestion:
get_dashboards_list()— список дашбордов (GetDocList)get_dashboard_charts()— чарты по листам +GetObject/GetLayoutget_dashboard_models()— дата-модели черезGetTablesAndKeysилиLoadModelget_script_tables()— парсинг Load Script → маппингtable → source_tablesyield_dashboard_lineage_details()— построение lineage с фильтрацией по prefix
| Qlik Engine API | OpenMetadata ChartType |
|---|---|
barchart |
Bar |
linechart |
Line |
piechart |
Pie |
table |
Table |
pivot-table |
Table |
scatterplot |
Scatter |
combochart |
Line |
kpi |
Other |
gauge |
Other |
text-image |
Text |
Для совместимости с Impala и корпоративными сервисами (включая Qlik Sense) в контейнере:
- В
sitecustomize.pyпонижается минимальный TLS до 1.1 и отключается строгая проверка сертификатов:import ssl ssl._create_default_https_context = ssl._create_unverified_context
- Файл копируется в
/opt/airflow/sitecustomize.pyпри сборке Docker-образа, чтобы настройки применялись ко всем ingestion-задачам Airflow в OpenMetadata.
Подключение к Qlik Sense выполняется через WSS с:
- SSL-сертификатами (путь к файлам или значения инлайн через
QlikCertificatePath/QlikCertificateValues) - Заголовком
X-Qlik-User(UserDirectory+UserId) - Отключённой проверкой hostname (
ssl.match_hostname = lambda cert, hostname: True)
Коннектор использует стандартный QlikSenseConnection из схемы OpenMetadata:
hostPort— адрес Qlik Sense (WSS)userDirectory/userId— аутентификация через заголовокX-Qlik-Usercertificates— SSL-сертификатыvalidateHostName— проверка hostname (в проекте отключена)displayUrl— базовый URL для ссылок на дашборды/чарты
Коннектор строит lineage в двух режимах:
- Через Load Script — парсит
qScript, ищет паттерныFROM/JOIN, извлекает квалифицированные имена таблиц видаschema.tableилиdb.schema.table - Через
connectorProperties.tableQualifiers— использует метаданные таблицы Qlik
Поиск таблиц в OpenMetadata:
search_in_any_service()+build_es_fqn_search_string()- Поддержка
db_service_prefixв форматеservice/db/schema/table
Коннектор разворачивается как кастомный Docker-образ поверх
openmetadata/ingestion:1.12.8:
FROM docker.getcollate.io/openmetadata/ingestion:1.12.8
USER root
COPY sitecustomize.py /opt/airflow/sitecustomize.py
COPY spacy/en_core_web_md-3.7.1-py3-none-any.whl /tmp/en_core_web_md-3.7.1-py3.whl
RUN chown airflow:root /opt/airflow/sitecustomize.py /tmp/en_core_web_md-3.7.1-py3.whl
USER airflow
RUN pip install --no-cache-dir /tmp/en_core_web_md-3.7.1-py3-none-any.whl
ENV PYTHONPATH=/opt/airflow:${PYTHONPATH}Разворачивание всего стека: docker-compose-postgres.yml.
cd om_custom_qlik_kz
pip install -e .Пакет: om-custom-qlik-kz==0.1.0
Проект создан для внутренних нужд Казахтелекома.