美文网首页
Openmetadata&Doris血缘管理(字段级别)

Openmetadata&Doris血缘管理(字段级别)

作者: 圆企鹅i | 来源:发表于2024-03-18 16:37 被阅读0次

Openmetadata&Doris血缘管理

Openmetadata版本:1.3.1

发现、协作和获取正确的数据的平台。 通过端到端元数据管理解决方案释放数据资产的价值,该解决方案包括数据发现、治理、数据质量、可观察性和人员协作。

核心能力:

  1. 元数据管理

  2. 数据血缘解析(字段级别)

  3. 数据表协作办公

  4. 数据质量分析及测试

优点:

  1. UI非常舒适且支持中文(多语言)

  2. 操作简单,功能丰富

  3. 安装简单,依赖组件比datahub更少,功能却更多

  4. 社区活跃,更新速度快

缺点:

  1. 国内博客数量少,可查询文档少,非常依赖官网文档,Slack和Github

  2. 官网不支持中文

  3. 与airflow完美适配,dolphin暂时还没适配

数据导入

支持页面一键导入元数据,对与BigQuery等数据源,支持页面一键解析血缘。

当然doris,mysql等仅仅支持页面一键导入元数据,并不能同时导入血缘。解析血缘需要使用python3 SDK进行手动一键导入。

doris_db.gif

元数据提取:导入数据源的元数据(表名,表描述,字段名,字段描述)

分析器提取:分析表的row count,样例数据,空值数量,字段重复数量等

dbt提取:从dbt模型提取血缘

image.png
运行可能会失败,但是元数据可以导入成功

导入表元数据预览

image.png

数据查询

数据查询因为底层使用的Elasticsearch,支持非常强大的全文索引,以及各种筛选,逻辑表达式筛选等

search.gif

表级别的元数据浏览

image.png

数据血缘

使用python3 SDK导入DORIS血缘

安装python3 openmetadata SDK

# openmetadata SDK install ps:安装版本需要和SDK版本完全一致 om=1.3.1 sdk=1.3.1
python3 -m pip install "openmetadata-ingestion~=1.3.1"

launcher.py 启动脚本

import os
import glob
from typing import Callable
from create_metadata import open_metadata
from sql_lineage_parser import parse

# client config
hostPort = "http://node-124:8585/api"
# get token from bots
jwtToken: str = (
    "token"
)
metadata = None

# doris params
service_name = "node-125-doris"
database_name = "default"
schema_name = "schema"

# sql path
sql_path = "project/sql"


def main():
    global metadata
    metadata = open_metadata(hostPort, jwtToken)
    # lineage parse
    scan_file_parse(sql_path, parse_sql)

def scan_file_parse(dir: str, parser: Callable):
    sql_files = glob.glob(os.path.join(dir, "**/*.sql"), recursive=True)
    for sql_file in sql_files:
        with open(sql_file, "r", encoding="utf-8") as file:
            sql = file.read()
            print(f"start parse {sql_file}")
            parser(sql)

def parse_sql(sql: str):
    parse(metadata, service_name, database_name, schema_name, sql)

if __name__ == "__main__":
    main()

create_metadata.py

from metadata.ingestion.ometa.ometa_api import OpenMetadata
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
    OpenMetadataConnection,
    AuthProvider,
)
from metadata.generated.schema.security.client.openMetadataJWTClientConfig import (
    OpenMetadataJWTClientConfig,
)


def open_metadata(hostPort: str, jwt_token: str):
    server_config = OpenMetadataConnection(
        hostPort=hostPort,
        authProvider=AuthProvider.openmetadata,
        securityConfig=OpenMetadataJWTClientConfig(jwtToken=jwt_token),
    )
    metadata = OpenMetadata(server_config)
    return metadata


# test client
def main():
    hostPort = "http://openmetadata:8585/api"
    jwtToken: str = (
        "token"
    )

    metadata = open_metadata(hostPort, jwtToken)
    # check client health
    health_check_result = metadata.health_check()

    # return True if health
    print("Health check result:", health_check_result)


if __name__ == "__main__":
    main()

sql_lineage_parser.py

from metadata.ingestion.ometa.ometa_api import OpenMetadata
from metadata.generated.schema.entity.services.databaseService import DatabaseService


def parse(
    metadata: OpenMetadata,
    service_name: str,
    db_name: str,
    schema_name: str,
    sql: str,
):

    database_service: DatabaseService = metadata.get_by_name(
        entity=DatabaseService, fqn=service_name
    )

    result = metadata.add_lineage_by_query(
        database_service=database_service,
        database_name=db_name,
        schema_name=schema_name,
        timeout=200,  # timeout in seconds
        sql=sql,  # your sql query
    )

导入效果图

lineage1.png

协同办公(评论留言)

OM支持非常多在数据库,数据表,字段留下痕迹的方式。包括但不限于,评论,标签,公告,描述,向xx申请等等。

可以在元数据的各种位置,留下想要的标记或者说补充说明,当然因为ES的关系,也支持全文索引。

非常适合,将一些复杂的业务逻辑和业务系统的工程师了解后记录在系统内。这将会大大减少沟通成本。

3.png

评论等行为会在对应模块和首页活动信息流中,进行展示

2.png

数据质量测试

列分析页面,可以直接看到每个列数据的null%,唯一%等,有助于一键预览

6.png

支持配置多种表级别,字段级别的测试用例,并且配置成定时执行。

举例:某一字段,只能为枚举A,B,C。可以通过测试用例进行质量的监控。或者一些数量值,监控数值应该在某个范围内等等。

4.png

安装

#Docker (version 20.10.0 or greater) 
docker --version
#Docker Compose (version v2.1.1 or greater) 
docker compose version
#install openmetadata-docker
mkdir openmetadata-docker && cd openmetadata-docker
wget https://github.com/open-metadata/OpenMetadata/releases/download/1.3.1-release/docker-compose.yml
# use mysql ("docker compose -f docker-compose-postgres.yml up --detach" is for postgres)
docker compose -f docker-compose.yml up --detach

# if finish
docker ps
CONTAINER ID   IMAGE                                                  COMMAND                  CREATED          STATUS                    PORTS                                                            NAMES
470cc8149826   openmetadata/server:1.3.1                             "./openmetadata-star…"   45 seconds ago   Up 43 seconds             3306/tcp, 9200/tcp, 9300/tcp, 0.0.0.0:8585-8586->8585-8586/tcp   openmetadata_server
63578aacbff5   openmetadata/ingestion:1.3.1                           "./ingestion_depende…"   45 seconds ago   Up 43 seconds             0.0.0.0:8080->8080/tcp                                           openmetadata_ingestion
9f5ee8334f4b   docker.elastic.co/elasticsearch/elasticsearch:7.16.3   "/tini -- /usr/local…"   45 seconds ago   Up 44 seconds             0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp                   openmetadata_elasticsearch
08947ab3424b   openmetadata/db:1.3.1                                  "/entrypoint.sh mysq…"   45 seconds ago   Up 44 seconds (healthy)   3306/tcp, 33060-33061/tcp  

细节参考官网或者联系在下

相关文章

网友评论

      本文标题:Openmetadata&Doris血缘管理(字段级别)

      本文链接:https://www.haomeiwen.com/subject/ksczzdtx.html