背景:筆者和團隊的小伙伴近期在進行數據治理/元數據管理方向的探索, 在接下來的系列文章中, 會陸續與讀者們進行分享在此過程中踩過的坑和收獲。
元數據管理系列文章:
[0] - 使用Atlas進行元數據管理之Atlas簡介
[1] - 使用Atlas進行元數據管理之Glossary(術語)
[2] - 使用Atlas進行元數據管理之Type(類型)
1. Glossary(術語表) 介紹
Atlas的術語表(Glossary)提供了一些適當的“單詞”,這些“單詞”能彼此進行關連和分類,以便業務用戶在使用的時候,即使在不同的上下文中也能很好的理解它們。此外,這些術語也是可以映射到數據資產中的,比如:數據庫,表,列等。
術語表抽象出了和數據相關的專業術語,使得用戶能以他們更熟悉的方式去查找和使用數據。
1.1 術語表功能
- 能夠使用自然語言(技術術語和/或業務術語)定義豐富的術語詞匯表。
- 能夠將術語在語義上相互關聯。
- 能夠將資產映射到術語表中。
- 能夠按類別划分這些術語。這為術語增加了更多的上下文。
- 允許按層次結構排列類別,能展示更廣泛和更精細的范圍。
- 從元數據中獨立管理術語表。
1.2 術語(Term)
對於企業來說術語作用的非常大的。對於有用且有意義的術語,需要圍繞其用途和上下文進行分組。 Apache Atlas中的術語必須具有唯一的qualifiedName,可以有相同名稱的術語,但它們不能屬於同一個術語表。具有相同名稱的術語只能存在於不同的術語表中。
術語名稱可以包含空格,下划線和短划線(作為引用單詞的自然方式)但不包含“。”或“@”,因為qualifiedName的格式為:<術語>@<術語限定名>。限定名稱可以更輕松地使用特定術語。
術語只能屬於單個術語表,並且它們的生命周期也是相同的,如果刪除術語表,則術語也會被刪除。術語可以屬於零個或多個類別,這允許將它們限定為更小或更大的上下文。
可以在Apache Atlas中為一個或多個實體分配/鏈接一個術語。可以使用分類(classifications,類似標簽的作用)對術語進行分類,並將相同的分類應用於分配術語的實體。
1.3 類別(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)
單擊分類標簽旁邊的+可為術語添加分類。



2.2.3 與其他術語建立術語關聯
查看術語詳細信息時,單擊Related Terms(相關術語)選項卡。單擊+將術語與當前術語鏈接。

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

2.3 類別視圖(Category)
當切換開關處於Category時,左側面板將列出所有術語表以及類別層次結構。

2.3.1 類別菜單(Category)
單擊Category旁邊的省略號...將顯示類別上下文菜單。
-
創建新類別

-
創建子類別或刪除類別

2.3.2 類別詳情
選擇Category后,詳細信息將顯示在右側窗口中。

2.3.3 術語分類
單擊詳情頁中Terms標簽旁邊的+鏈接所選類別下的術語。



3. 術語分配流程
可以在搜索結果頁和Glossary-Terms實體詳情頁中給entity(實體)分配術語。
3.1 分配術語
在搜索結果頁面,點擊terms列下的+

點擊terms標簽旁邊的+

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

3.2 分類傳播(Propagated classification)
如果一個術語具有分類,則該術語下的實體繼承相同的分類。


3.3. 使用術語搜索
Apache Atlas基本搜索API和UI已更新,以支持術語作為搜索條件。允許用戶查找與給定術語相關聯的實體。

4. REST API
Atlas支持以下操作,可在這里找到REST接口的詳細信息。


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)
- 創建術語表
- 創建一個術語
- 創建分類術語
- 用關系創建術語
- 創建一個類別
- 創建具有層次結構的類別
- 創建類別並對術語進行分類
- 為實體分配術語
注意:
- 在創建操作期間,術語表,術語和類別將獲得自動分配的GUID和qualifiedName。
- 要創建包含子項的類別,必須事先創建子項。
- 要創建屬於某個類別的術語,必須事先創建該類別。
- 要創建關系術語,必須事先創建相關術語。
5.2.2 讀操作(READ)
- 通過GUID獲取術語表 - 提供屬於術語表的所有術語和類別(標題)。
- 獲取所有術語表 - 為所有術語表提供他們的術語和類別(標題)。
- 通過GUID獲取術語 - 提供有關術語,其所屬類別(如果有)以及任何相關術語的詳細信息。
- 通過GUID獲取類別 - 提供有關類別,類別層次結構(如果有)和屬於該類別的術語的詳細信息。
- 獲取給定術語表的所有術語 - 提供屬於給定術語表的所有術語(具有#3中提到的詳細信息)。
- 獲取給定術語表的所有類別 - 提供屬於給定術語表的所有類別(具有#4中提到的詳細信息)。
- 獲取與給定術語相關的所有術語 - 提供與給定術語相關/鏈接的所有術語。
- 獲取與給定類別(父母和子女)相關的所有類別
- 獲取給定類別的所有條款
5.2.3 更新操作(UPDATE)
- 局部更新術語表
- 局部更新術語
- 局部更新類別
- 更新給定的詞匯表
- 更新給定的術語
- 更新給定的類別
注意:
- 局部更新僅處理詞匯表模型文件中定義的原始屬性。
- 分配后,無法更改GUID和qualifiedName。唯一的方法是刪除並重新創建所需的對象。
- 在任何更新中都無法刪除錨點
- 更新API期望在GET調用之后就地修改JSON。任何缺失的屬性/關系都將被刪除。
- 對類別層次結構的任何更新都會導致對其下的層次結構進行級聯更新,例如錨更改會影響所有子項,父項更改會影響self和children的qualifiedName。
5.2.4 刪除操作(DELETE)
- 刪除術語表 - 刪除錨定到給定詞匯表的所有類別和術語。如果已為實體分配任何術語,則會阻止此刪除。
- 刪除術語 - 僅當術語未與任何實體關聯/分配時才刪除該術語。
- 刪除類別 - 僅刪除給定類別,所有子項都成為頂級類別。
- 從實體中刪除術語分配
