Openmetadata&Doris血緣管理
Openmetadata版本:1.3.1
發(fā)現(xiàn)砂竖、協(xié)作和獲取正確的數(shù)據(jù)的平臺印蔬。 通過端到端元數(shù)據(jù)管理解決方案釋放數(shù)據(jù)資產(chǎn)的價值,該解決方案包括數(shù)據(jù)發(fā)現(xiàn)搀军、治理、數(shù)據(jù)質(zhì)量、可觀察性和人員協(xié)作谬擦。
核心能力:
元數(shù)據(jù)管理
數(shù)據(jù)血緣解析(字段級別)
數(shù)據(jù)表協(xié)作辦公
數(shù)據(jù)質(zhì)量分析及測試
優(yōu)點:
UI非常舒適且支持中文(多語言)
操作簡單颗品,功能豐富
安裝簡單,依賴組件比datahub更少侧巨,功能卻更多
社區(qū)活躍舅锄,更新速度快
缺點:
國內(nèi)博客數(shù)量少,可查詢文檔少司忱,非常依賴官網(wǎng)文檔皇忿,Slack和Github
官網(wǎng)不支持中文
與airflow完美適配畴蹭,dolphin暫時還沒適配
數(shù)據(jù)導(dǎo)入
支持頁面一鍵導(dǎo)入元數(shù)據(jù),對與BigQuery等數(shù)據(jù)源鳍烁,支持頁面一鍵解析血緣叨襟。
當(dāng)然doris,mysql等僅僅支持頁面一鍵導(dǎo)入元數(shù)據(jù)老翘,并不能同時導(dǎo)入血緣芹啥。解析血緣需要使用python3 SDK進行手動一鍵導(dǎo)入。
元數(shù)據(jù)提绕糖汀:導(dǎo)入數(shù)據(jù)源的元數(shù)據(jù)(表名墓怀,表描述,字段名卫键,字段描述)
分析器提瓤摹:分析表的row count,樣例數(shù)據(jù)莉炉,空值數(shù)量钓账,字段重復(fù)數(shù)量等
dbt提取:從dbt模型提取血緣
運行可能會失敗絮宁,但是元數(shù)據(jù)可以導(dǎo)入成功
導(dǎo)入表元數(shù)據(jù)預(yù)覽
數(shù)據(jù)查詢
數(shù)據(jù)查詢因為底層使用的Elasticsearch梆暮,支持非常強大的全文索引,以及各種篩選绍昂,邏輯表達式篩選等
表級別的元數(shù)據(jù)瀏覽
數(shù)據(jù)血緣
使用python3 SDK導(dǎo)入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
)
導(dǎo)入效果圖
協(xié)同辦公(評論留言)
OM支持非常多在數(shù)據(jù)庫啦粹,數(shù)據(jù)表,字段留下痕跡的方式窘游。包括但不限于唠椭,評論,標(biāo)簽忍饰,公告贪嫂,描述,向xx申請等等艾蓝。
可以在元數(shù)據(jù)的各種位置力崇,留下想要的標(biāo)記或者說補充說明,當(dāng)然因為ES的關(guān)系赢织,也支持全文索引餐曹。
非常適合,將一些復(fù)雜的業(yè)務(wù)邏輯和業(yè)務(wù)系統(tǒng)的工程師了解后記錄在系統(tǒng)內(nèi)敌厘。這將會大大減少溝通成本。
評論等行為會在對應(yīng)模塊和首頁活動信息流中朽合,進行展示
數(shù)據(jù)質(zhì)量測試
列分析頁面俱两,可以直接看到每個列數(shù)據(jù)的null%饱狂,唯一%等,有助于一鍵預(yù)覽
支持配置多種表級別宪彩,字段級別的測試用例休讳,并且配置成定時執(zhí)行。
舉例:某一字段尿孔,只能為枚舉A,B,C俊柔。可以通過測試用例進行質(zhì)量的監(jiān)控活合〕簦或者一些數(shù)量值,監(jiān)控數(shù)值應(yīng)該在某個范圍內(nèi)等等白指。
安裝
#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
細節(jié)參考官網(wǎng)或者聯(lián)系在下