使用Atlas進行元數據管理之Glossary

背景:筆者和團隊的小夥伴近期在進行數據治理/元數據管理方向的探索,在接下來的系列文章中,會將經驗與收穫和讀者們進行分享。html

0. 當咱們談論數據治理/元數據管理的時候,咱們究竟在討論什麼?

談到數據治理,天然離不開元數據。元數據(Metadata),用一句話定義就是:描述數據的數據。元數據打通了數據源、數據倉庫、數據應用,記錄了數據從產生到消費的全過程。所以,數據治理的核心就是元數據管理數據庫

數據的真正價值在於數據驅動決策,經過數據指導運營。經過數據驅動的方法判斷趨勢,幫住咱們發現問題,繼而推進創新或產生新的解決方案。隨着企業數據爆發式增加,數據體量愈來愈難以估量,咱們很難說清楚咱們到底擁有哪些數據,這些數據從哪裏來,到哪裏去,發生了什麼變化,應該如何使用它們。所以元數據管理(數據治理)成爲企業級數據湖不可或缺的重要組成部分。apache

惋惜很長一段時間內,市面都沒有成熟的數據治理解決方案。直到2015年,Hortonworks終於坐不住了,約了一衆小夥伴公司倡議:我們開始整個數據治理方案吧。而後,包含數據分類、集中策略引擎、數據血緣、安全和生命週期管理功能的Atlas應運而生。(PS:另外一個應用的較多的元數據開源項目是Linkedin 在2016年新開源的項目:WhereHows)Atlas目前最新的版本爲2018年9月18日發佈的1.0.0版本。api

1. Atlas介紹

Atlas 是一個可伸縮和可擴展的核心基礎治理服務集合 ,使企業可以有效地和高效地知足 Hadoop 中的合規性要求,並容許與整個企業數據生態系統的集成。安全

Apache Atlas爲組織提供開放式元數據管理和治理功能,用以構建其數據資產目錄,對這些資產進行分類和管理,併爲數據科學家,數據分析師和數據治理團隊提供圍繞這些數據資產的協做功能。bash

Atlas High Level Architecture

關於Atlas的背景講完了,接下來咱們依次來說Atlas中的幾個概念,首先是今天的主角:Glossaryoop

1.1 Glossary(術語表) 介紹

Atlas的術語表(Glossary)提供了一些適當的「單詞」,這些「單詞」能彼此進行關連和分類,以便業務用戶在使用的時候,即便在不一樣的上下文中也能很好的理解它們。此外,這些術語也是能夠映射到數據資產中的,好比:數據庫,表,列等。ui

術語表抽象出了和數據相關的專業術語,使得用戶能以他們更熟悉的方式去查找和使用數據。spa

1.2 術語表功能

  • 可以使用天然語言(技術術語和/或業務術語)定義豐富的術語詞彙表。
  • 可以將術語在語義上相互關聯。
  • 可以將資產映射到術語表中。
  • 可以按類別劃分這些術語。這爲術語增長了更多的上下文。
  • 容許按層次結構排列類別,能展現更普遍和更精細的範圍。
  • 從元數據中獨立管理術語表。

1.3 術語(Term)

對於企業來講術語做用的很是大的。對於有用且有意義的術語,須要圍繞其用途和上下文進行分組。 Apache Atlas中的術語必須具備惟一的qualifiedName,能夠有相同名稱的術語,但它們不能屬於同一個術語表。具備相同名稱的術語只能存在於不一樣的術語表中。3d

術語名稱能夠包含空格,下劃線和短劃線(做爲引用單詞的天然方式)但不包含「。」或「@」,由於qualifiedName的格式爲:<術語>@<術語限定名>。限定名稱能夠更輕鬆地使用特定術語。

術語只能屬於單個術語表,而且它們的生命週期也是相同的,若是刪除術語表,則術語也會被刪除。術語能夠屬於零個或多個類別,這容許將它們限定爲更小或更大的上下文。

能夠在Apache Atlas中爲一個或多個實體分配/連接一個術語。可使用分類(classifications,相似標籤的做用)對術語進行分類,並將相同的分類應用於分配術語的實體。

1.4 類別(Category)

類別是組織術語的一種方式,以即可以豐富術語的上下文。

類別可能包含也可能不包含層次結構,即子類別層次結構。類別的qualifiedName是使用它在術語表中的分層位置導出的,例如:<類別名稱>.<父類別限定名>。當發生任何層級更改時,此限定名稱都會更新,例如:添加父類別,刪除父類別或更改父類別。

2. Atlas Web UI

Apache Atlas UI提供了友好的用戶界面,可使用術語表相關的功能,其中包括:

  • 建立術語表,術語和類別
  • 在術語之間建立各類關係: synonymns(同義詞),antonymns(反義詞),seeAlso(參考)
  • 調整類別的層次結構中
  • 爲實體分配實體(entities)
  • 使用關聯術語搜索實體

與術語表相關的UI均可以在GLOSSARY的Tab下找到。

2.1 Glossary Tab

Apache Atlas UI提供了兩種使用術語表的方法: 術語(Terms)視圖類別(Category)視圖

(1) 術語視圖(Terms)

術語視圖容許用戶執行如下操做:

  • 建立,更新和刪除術語
  • 添加,刪除和更新與術語關聯的分類
  • 添加,刪除和更新術語的分類
  • 在術語之間建立各類關係
  • 查看與術語關聯的實體
(2) 類別視圖(Category)

類別視圖容許用戶執行如下操做:

  • 建立,更新和刪除類別和子類別
  • 將術語與類別相關聯

用戶可使用術語表選項卡中提供的切換在術語視圖和類別視圖之間切換。

術語視圖

分類視圖

2.2 術語視圖(Terms)

  • 建立一個新術語
    單擊術語表名稱旁邊的省略號(...)會顯示一個彈出式菜單,容許用戶在術語表中建立術語或刪除術語表 - 以下所示。

    建立術語

  • 刪除一個術語
    單擊術語名稱旁邊的省略號(...)會顯示一個彈出式菜單,容許用戶刪除該術語 - 以下所示。

    刪除術語

2.2.1 術語詳情

選擇術語表UI中的術語,能夠查看對應術語的各類詳細信息。詳細信息頁面下的每一個選項卡提供該術語的不一樣詳細信息。

  • Entities(實體)選項卡:顯示分配給所選術語的實體
  • Classifications(分類)選項卡:顯示與所選術語關聯的分類
  • Related terms (相關術語)選項卡:顯示與所選術語相關的術語
    術語詳情
2.2.2 給術語添加分類(classification)

單擊分類標籤旁邊的+可爲術語添加分類。

添加分類1

添加分類2

添加分類3

2.2.3 與其餘術語創建術語關聯

查看術語詳細信息時,單擊Related Terms(相關術語)選項卡。單擊+將術語與當前術語連接。

關聯

2.2.4 對術語進行分類

單擊類別標籤旁邊的+可對術語進行分類。將提供模態對話框以選擇類別。

分類

2.3 類別視圖(Category)

當切換開關處於Category時,左側面板將列出全部術語表以及類別層次結構。

image

2.3.1 類別菜單(Category)

單擊Category旁邊的省略號...將顯示類別上下文菜單。

  • 建立新類別

    建立類別

  • 建立子類別或刪除類別

    建立/刪除子類別

2.3.2 類別詳情

選擇Category後,詳細信息將顯示在右側窗口中。

分類詳情

2.3.3 術語分類

單擊詳情頁中Terms標籤旁邊的+連接所選類別下的術語。

術語分類1

術語分類2

術語分類3

3. 術語分配流程

能夠在搜索結果頁和Glossary-Terms實體詳情頁中給entity(實體)分配術語。

3.1 分配術語

在搜索結果頁面,點擊terms列下的+

分配術語1

點擊terms標籤旁邊的+

分配術語2

這兩個操做都將顯示下面的結果,按照屏幕上的提示完成術語分配。

完成術語分配

3.2 分類傳播(Propagated classification)

若是一個術語具備分類,則該術語下的實體繼承相同的分類。

image

image

3.3. 使用術語搜索

Apache Atlas基本搜索API和UI已更新,以支持術語做爲搜索條件。容許用戶查找與給定術語相關聯的實體。

搜索

4. REST API

Atlas支持如下操做,可在這裏找到REST接口的詳細信息。

Glossary REST API
Glossary REST API

5.1 JSON結構

  • Glossary
{
    "guid": "2f341934-f18c-48b3-aa12-eaa0a2bfce85",
    "qualifiedName": "SampleBank",
    "displayName": "Banking",
    "shortDescription": "Glossary of bank",
    "longDescription": "Glossary of bank - long description",
    "language": "English",
    "usage": "N/A",
    "terms": [
    {
        "termGuid": "502d34f1-b85f-4ad9-9d9f-fe7020ff0acb",
        "relationGuid": "6bb803e4-3af6-4924-aad6-6ad9f95ecd14",
        "displayText": "A savings account"
    }, {
        "termGuid": "e441a540-ee55-4fc8-8eaf-4b9943d8929c",
        "relationGuid": "dbc46795-76ff-4f68-9043-be0eff0bc0f3",
        "displayText": "15-30 yr mortgage"
    }, {
        "termGuid": "998e3692-51a8-47fe-b3a0-0d9f794437eb",
        "relationGuid": "0dcd31b9-a81c-4185-ad4b-9209a97c305b",
        "displayText": "A checking account"
    }, {
        "termGuid": "c4e2b956-2589-4648-8596-240d3bea5e44",
        "relationGuid": "e71c4a5d-694b-47a5-a41e-126ade857279",
        "displayText": "ARM loans"
    }],
    "categories": [{
        "categoryGuid": "dd94859e-7453-4bc9-b634-a17fc14590f8",
        "parentCategoryGuid": "e6a3df1f-5670-4f9e-84da-91f77d008ce3",
        "relationGuid": "a0b7da02-1ccd-4415-bc54-3d0cdb8857e7",
        "displayText": "Accounts"
    }, {
        "categoryGuid": "e6a3df1f-5670-4f9e-84da-91f77d008ce3",
        "relationGuid": "0e84a358-a4aa-4bd3-b806-497a6962ae1d",
        "displayText": "Customer"
    }, {
        "categoryGuid": "7f041401-de8c-443f-a3b7-7bf5a910ff6f",
        "parentCategoryGuid": "e6a3df1f-5670-4f9e-84da-91f77d008ce3",
        "relationGuid": "7757b031-4e25-43a8-bf77-946f7f06c67a",
        "displayText": "Loans"
    }]
}
複製代碼
  • Term
{
    "guid": "e441a540-ee55-4fc8-8eaf-4b9943d8929c",
    "qualifiedName": "fixed_mtg@SampleBank",
    "displayName": "15-30 yr mortgage",
    "shortDescription": "Short description",
    "longDescription": "Long description",
    "examples": ["N/A"],
    "abbreviation": "FMTG",
    "anchor": {
        "glossaryGuid": "2f341934-f18c-48b3-aa12-eaa0a2bfce85",
        "relationGuid": "dbc46795-76ff-4f68-9043-be0eff0bc0f3"
    },
    "categories": [{
        "categoryGuid": "7f041401-de8c-443f-a3b7-7bf5a910ff6f",
        "relationGuid": "b4cddd33-7b0c-41e2-9324-afe549ec6ada",
        "displayText": "Loans"
    }],
    "seeAlso"           : [],
    "synonyms"          : [],
    "antonyms"          : [],
    "replacedBy"        : [],
    "replacementTerms"  : [],
    "translationTerms"  : [],
    "translatedTerms"   : [],
    "isA"               : [],
    "classifies"        : [],
    "preferredTerms"    : [],
    "preferredToTerms": [ {
                           "termGuid"   : "c4e2b956-2589-4648-8596-240d3bea5e44",
                           "displayText": "ARM Loans"
                         }]
}
複製代碼
  • Category
{
    "guid": "7f041401-de8c-443f-a3b7-7bf5a910ff6f",
    "qualifiedName": "Loans.Customer@HortoniaBank",
    "displayName": "Loans",
    "shortDescription": "Loan categorization",
    "anchor": {
        "glossaryGuid": "2f341934-f18c-48b3-aa12-eaa0a2bfce85",
        "relationGuid": "7757b031-4e25-43a8-bf77-946f7f06c67a"
    },
    "parentCategory": {
        "categoryGuid": "e6a3df1f-5670-4f9e-84da-91f77d008ce3",
        "relationGuid": "8a0a8e11-0bb5-483b-b7d6-cfe0b1d55ef6"
    },
    "childrenCategories" : [],
    "terms": [{
        "termGuid": "e441a540-ee55-4fc8-8eaf-4b9943d8929c",
        "relationGuid": "b4cddd33-7b0c-41e2-9324-afe549ec6ada",
        "displayText": "15-30 yr mortgage"
    }, {
        "termGuid": "c4e2b956-2589-4648-8596-240d3bea5e44",
        "relationGuid": "8db1e784-4f04-4eda-9a58-6c9535a95451",
        "displayText": "ARM loans"
    }]
}
複製代碼

5.2 CURD

5.2.1 建立操做(CREATE)
  1. 建立術語表
  2. 建立一個術語
  3. 建立分類術語
  4. 用關係建立術語
  5. 建立一個類別
  6. 建立具備層次結構的類別
  7. 建立類別並對術語進行分類
  8. 爲實體分配術語

注意:

  • 在建立操做期間,術語表,術語和類別將得到自動分配的GUID和qualifiedName。
  • 要建立包含子項的類別,必須事先建立子項。
  • 要建立屬於某個類別的術語,必須事先建立該類別。
  • 要建立關係術語,必須事先建立相關術語。
5.2.2 讀操做(READ)
  1. 經過GUID獲取術語表 - 提供屬於術語表的全部術語和類別(標題)。
  2. 獲取全部術語表 - 爲全部術語表提供他們的術語和類別(標題)。
  3. 經過GUID獲取術語 - 提供有關術語,其所屬類別(若是有)以及任何相關術語的詳細信息。
  4. 經過GUID獲取類別 - 提供有關類別,類別層次結構(若是有)和屬於該類別的術語的詳細信息。
  5. 獲取給定術語表的全部術語 - 提供屬於給定術語表的全部術語(具備#3中提到的詳細信息)。
  6. 獲取給定術語表的全部類別 - 提供屬於給定術語表的全部類別(具備#4中提到的詳細信息)。
  7. 獲取與給定術語相關的全部術語 - 提供與給定術語相關/連接的全部術語。
  8. 獲取與給定類別(父母和子女)相關的全部類別
  9. 獲取給定類別的全部條款
5.2.3 更新操做(UPDATE)
  1. 局部更新術語表
  2. 局部更新術語
  3. 局部更新類別
  4. 更新給定的詞彙表
  5. 更新給定的術語
  6. 更新給定的類別

注意:

  • 局部更新僅處理詞彙表模型文件中定義的原始屬性
  • 分配後,沒法更改GUID和qualifiedName。惟一的方法是刪除並從新建立所需的對象。
  • 在任何更新中都沒法刪除錨點
  • 更新API指望在GET調用以後就地修改JSON。任何缺失的屬性/關係都將被刪除。
  • 對類別層次結構的任何更新都會致使對其下的層次結構進行級聯更新,例如錨更改會影響全部子項,父項更改會影響self和children的qualifiedName。
5.2.4 刪除操做(DELETE)
  1. 刪除術語表 - 刪除錨定到給定詞彙表的全部類別和術語。若是已爲實體分配任何術語,則會阻止此刪除。
  2. 刪除術語 - 僅當術語未與任何實體關聯/分配時才刪除該術語。
  3. 刪除類別 - 僅刪除給定類別,全部子項都成爲頂級類別。
  4. 從實體中刪除術語分配
相關文章
相關標籤/搜索