背景:筆者和團隊的小夥伴近期在進行資料治理/後設資料管理方向的探索,在接下來的系列文章中,會將經驗與收穫和讀者們進行分享。
0. 當我們談論資料治理/後設資料管理的時候,我們究竟在討論什麼?
談到資料治理,自然離不開後設資料。後設資料(Metadata),用一句話定義就是:描述資料的資料。後設資料打通了資料來源、資料倉儲、資料應用,記錄了資料從產生到消費的全過程。因此,資料治理的核心就是後設資料管理
。
資料的真正價值在於資料驅動決策,通過資料指導運營。通過資料驅動的方法判斷趨勢,幫住我們發現問題,繼而推動創新或產生新的解決方案。隨著企業資料爆發式增長,資料體量越來越難以估量,我們很難說清楚我們到底擁有哪些資料,這些資料從哪裡來,到哪裡去,發生了什麼變化,應該如何使用它們。因此後設資料管理(資料治理)成為企業級資料湖不可或缺的重要組成部分。
可惜很長一段時間內,市面都沒有成熟的資料治理解決方案。直到2015年,Hortonworks終於坐不住了,約了一眾小夥伴公司倡議:我們們開始整個資料治理方案吧。然後,包含資料分類、集中策略引擎、資料血緣、安全和生命週期管理功能的Atlas應運而生。(PS:另一個應用的較多的後設資料開源專案是Linkedin 在2016年新開源的專案:WhereHows
)Atlas目前最新的版本為2018年9月18日釋出的1.0.0
版本。
1. Atlas介紹
Atlas 是一個可伸縮和可擴充套件的核心基礎治理服務集合 ,使企業能夠有效地和高效地滿足 Hadoop 中的合規性要求,並允許與整個企業資料生態系統的整合。
Apache Atlas為組織提供開放式後設資料管理和治理功能,用以構建其資料資產目錄,對這些資產進行分類和管理,併為資料科學家,資料分析師和資料治理團隊提供圍繞這些資料資產的協作功能。
關於Atlas的背景講完了,接下來我們依次來講Atlas中的幾個概念,首先是今天的主角:Glossary
。
1.1 Glossary(術語表) 介紹
Atlas的術語表(Glossary)提供了一些適當的“單詞”,這些“單詞”能彼此進行關連和分類,以便業務使用者在使用的時候,即使在不同的上下文中也能很好的理解它們。此外,這些術語也是可以對映到資料資產中的,比如:資料庫,表,列等。
術語表抽象出了和資料相關的專業術語,使得使用者能以他們更熟悉的方式去查詢和使用資料。
1.2 術語表功能
- 能夠使用自然語言(技術術語和/或業務術語)定義豐富的術語詞彙表。
- 能夠將術語在語義上相互關聯。
- 能夠將資產對映到術語表中。
- 能夠按類別劃分這些術語。這為術語增加了更多的上下文。
- 允許按層次結構排列類別,能展示更廣泛和更精細的範圍。
- 從後設資料中獨立管理術語表。
1.3 術語(Term)
對於企業來說術語作用的非常大的。對於有用且有意義的術語,需要圍繞其用途和上下文進行分組。 Apache Atlas中的術語必須具有唯一的qualifiedName,可以有相同名稱的術語,但它們不能屬於同一個術語表。具有相同名稱的術語只能存在於不同的術語表中。
術語名稱可以包含空格,下劃線和短劃線(作為引用單詞的自然方式)但不包含“。”或“@”,因為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)
單擊分類標籤旁邊的+
可為術語新增分類。
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)
- 刪除術語表 - 刪除錨定到給定詞彙表的所有類別和術語。如果已為實體分配任何術語,則會阻止此刪除。
- 刪除術語 - 僅當術語未與任何實體關聯/分配時才刪除該術語。
- 刪除類別 - 僅刪除給定類別,所有子項都成為頂級類別。
- 從實體中刪除術語分配