Openmetadata&Doris血缘管理
Openmetadata版本:1.3.1
发现、协作和获取正确的数据的平台。 通过端到端元数据管理解决方案释放数据资产的价值,该解决方案包括数据发现、治理、数据质量、可观察性和人员协作。
核心能力:
-
元数据管理
-
数据血缘解析(字段级别)
-
数据表协作办公
-
数据质量分析及测试
优点:
-
UI非常舒适且支持中文(多语言)
-
操作简单,功能丰富
-
安装简单,依赖组件比datahub更少,功能却更多
-
社区活跃,更新速度快
缺点:
-
国内博客数量少,可查询文档少,非常依赖官网文档,Slack和Github
-
官网不支持中文
-
与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
细节参考官网或者联系在下
网友评论