Openmetadata&Doris血緣管理(字段級別)

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é)作谬擦。

核心能力:

  1. 元數(shù)據(jù)管理

  2. 數(shù)據(jù)血緣解析(字段級別)

  3. 數(shù)據(jù)表協(xié)作辦公

  4. 數(shù)據(jù)質(zhì)量分析及測試

優(yōu)點:

  1. UI非常舒適且支持中文(多語言)

  2. 操作簡單颗品,功能豐富

  3. 安裝簡單,依賴組件比datahub更少侧巨,功能卻更多

  4. 社區(qū)活躍舅锄,更新速度快

缺點:

  1. 國內(nèi)博客數(shù)量少,可查詢文檔少司忱,非常依賴官網(wǎng)文檔皇忿,Slack和Github

  2. 官網(wǎng)不支持中文

  3. 與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)入。

doris_db.gif

元數(shù)據(jù)提绕糖汀:導(dǎo)入數(shù)據(jù)源的元數(shù)據(jù)(表名墓怀,表描述,字段名卫键,字段描述)

分析器提瓤摹:分析表的row count,樣例數(shù)據(jù)莉炉,空值數(shù)量钓账,字段重復(fù)數(shù)量等

dbt提取:從dbt模型提取血緣

image.png

運行可能會失敗絮宁,但是元數(shù)據(jù)可以導(dǎo)入成功

導(dǎo)入表元數(shù)據(jù)預(yù)覽

image.png

數(shù)據(jù)查詢

數(shù)據(jù)查詢因為底層使用的Elasticsearch梆暮,支持非常強大的全文索引,以及各種篩選绍昂,邏輯表達式篩選等

search.gif

表級別的元數(shù)據(jù)瀏覽

image.png

數(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)入效果圖

lineage1.png

協(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)敌厘。這將會大大減少溝通成本。

3.png

評論等行為會在對應(yīng)模塊和首頁活動信息流中朽合,進行展示

2.png

數(shù)據(jù)質(zhì)量測試

列分析頁面俱两,可以直接看到每個列數(shù)據(jù)的null%饱狂,唯一%等,有助于一鍵預(yù)覽

6.png

支持配置多種表級別宪彩,字段級別的測試用例休讳,并且配置成定時執(zhí)行。

舉例:某一字段尿孔,只能為枚舉A,B,C俊柔。可以通過測試用例進行質(zhì)量的監(jiān)控活合〕簦或者一些數(shù)量值,監(jiān)控數(shù)值應(yīng)該在某個范圍內(nèi)等等白指。

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  

細節(jié)參考官網(wǎng)或者聯(lián)系在下

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末留晚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子告嘲,更是在濱河造成了極大的恐慌错维,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橄唬,死亡現(xiàn)場離奇詭異赋焕,居然都是意外死亡,警方通過查閱死者的電腦和手機仰楚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門隆判,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缸血,你說我怎么就攤上這事蜜氨。” “怎么了捎泻?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵飒炎,是天一觀的道長。 經(jīng)常有香客問我笆豁,道長郎汪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任闯狱,我火速辦了婚禮煞赢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哄孤。我一直安慰自己照筑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凝危,像睡著了一般波俄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛾默,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天懦铺,我揣著相機與錄音,去河邊找鬼支鸡。 笑死冬念,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牧挣。 我是一名探鬼主播急前,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼浸踩!你這毒婦竟也來了叔汁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤检碗,失蹤者是張志新(化名)和其女友劉穎据块,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體折剃,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡另假,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了怕犁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片边篮。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奏甫,靈堂內(nèi)的尸體忽然破棺而出戈轿,到底是詐尸還是另有隱情,我是刑警寧澤阵子,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布思杯,位于F島的核電站,受9級特大地震影響挠进,放射性物質(zhì)發(fā)生泄漏色乾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一领突、第九天 我趴在偏房一處隱蔽的房頂上張望暖璧。 院中可真熱鬧,春花似錦君旦、人聲如沸澎办。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浮驳。三九已至悍汛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間至会,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工谱俭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奉件,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓昆著,卻偏偏與公主長得像县貌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凑懂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容