Skip to content

foxkz-04/Openmetadata

Repository files navigation

OpenMetadata — Custom Qlik Sense Connector (Kazakhtelecom)

Кастомный коннектор 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/GetLayout
  • get_dashboard_models() — дата-модели через GetTablesAndKeys или LoadModel
  • get_script_tables() — парсинг Load Script → маппинг table → source_tables
  • yield_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

TLS / SSL настройка

Для совместимости с 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)

Аутентификация в Qlik Sense

Коннектор использует стандартный QlikSenseConnection из схемы OpenMetadata:

  • hostPort — адрес Qlik Sense (WSS)
  • userDirectory / userId — аутентификация через заголовок X-Qlik-User
  • certificates — SSL-сертификаты
  • validateHostName — проверка hostname (в проекте отключена)
  • displayUrl — базовый URL для ссылок на дашборды/чарты

Lineage

Коннектор строит lineage в двух режимах:

  1. Через Load Script — парсит qScript, ищет паттерны FROM/JOIN, извлекает квалифицированные имена таблиц вида schema.table или db.schema.table
  2. Через 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

Licenses

Проект создан для внутренних нужд Казахтелекома.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors