背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获。

元数据管理系列文章:

[0] - 使用Atlas进行元数据管理之Atlas简介

[1] - 使用Atlas进行元数据管理之Glossary(术语)

[2] - 使用Atlas进行元数据管理之Type(类型)

1. 概述

Atlas允许用户为他们想要管理的元数据对象定义模型。该模型由称为type(类型)的定义组成。称为entities(实体)type(类型)实例表示受管理的实际元数据对象。 Type System是一个允许用户定义和管理类型和实体的组件。开箱即用的Atlas管理的所有元数据对象(例如Hive表)都使用类型建模并表示为实体。要在Atlas中存储新类型的元数据,需要了解类型系统组件的概念。

2. Types(类型)

Atlas中的Type是对特定类型的元数据对象如何存储和访问的定义。Type表示定义元数据对象属性的一个或一组属性。具有开发基础的用户能了解到,类型就相当于面向对象编程语言的“Class”定义或关系数据库的“table schema”。

使用Atlas的类型的其中一个示例是Hive表。 Hive表定义了以下属性:

Name:         hive_table
TypeCategory: Entity
SuperTypes: DataSet
Attributes:
name: string
db: hive_db
owner: string
createTime: date
lastAccessTime: date
comment: string
retention: int
sd: hive_storagedesc
partitionKeys: array<hive_column>
aliases: array<string>
columns: array<hive_column>
parameters: map<string,string>
viewOriginalText: string
viewExpandedText: string
tableType: string
temporary: boolean

从上面的例子中可以注意到以下几点:

  • Atlas中的类型(Type)由name唯一标识

  • Type具有元类型。Atlas中有以下元类型:

    • 原始元类型(Primitive metatypes):boolean,byte,short,int,long,float,double,biginteger,bigdecimal,string,date
    • 枚举元型(Enum metatypes)
    • 集合元类型(Collection metatypes:):array, map
    • 复合元类型(Composite metatypes):Entity, Struct, Classification, Relationship
  • 实体(Entity)和分类(Classification)类型可以从其他类型继承,称为“超类型/父类型”(supertype) ,它包括在超类型中定义的属性。这允许建模者在一组相关类型等中定义公共属性。类似于面向对象语言如何为类定义父类。 Atlas中的类型也可以从多个超类型扩展。

    • 在此示例中,每个配置单元表都从称为DataSet的预定义超类型扩展。稍后将提供有关此预定义类型的更多详细信息。
  • 具有元类型EntityStructClassificationRelationship的类型可以具有属性的集合。每个属性都有一个名称(例如: name)和一些其他相关属性。可以使用表达式type_name.attribute_name引用属性。值得注意的是,属性本身是使用Atlas元类型定义的。

    • 在此示例中,hive_table.name是String,hive_table.aliases是一个字符串数组,hive_table.db是指一个名为hive_db的类型的实例,依此类推。
  • 属性中的类型引用(如hive_table.db)特别有趣,使用这样的属性,我们可以定义Atlas中定义的两种类型之间的任意关系,从而构建丰富的模型。此外,还可以将引用列表收集为属性类型(例如,hive_table.columns,表示从hive_table到hive_column类型的引用列表)

3. Entities(实体)

Atlas中的entitytype的特定值或实例,因此表示现实世界中的特定元数据对象。用我们对面向对象编程语言的类比,实例(instance)是某个类(Class)对象(Object)

实体的其中一个示例就是Hive表。Hive在'default'数据库中有一个名为'customers'的表。该表是hive_table类型的Atlas中的“实体”。由于是实体类型的实例,它将具有作为Hive表'type'的一部分的每个属性的值,例如:

guid:     "9ba387dd-fa76-429c-b791-ffc338d3c91f"
typeName: "hive_table"
status: "ACTIVE"
values:
name: “customers”
db: { "guid": "b42c6cfc-c1e7-42fd-a9e6-890e0adf33bc", "typeName": "hive_db" }
owner: “admin”
createTime: 1490761686029
updateTime: 1516298102877
comment: null
retention: 0
sd: { "guid": "ff58025f-6854-4195-9f75-3a3058dd8dcf", "typeName": "hive_storagedesc" }
partitionKeys: null
aliases: null
columns: [ { "guid": ""65e2204f-6a23-4130-934a-9679af6a211f", "typeName": "hive_column" }, { "guid": ""d726de70-faca-46fb-9c99-cf04f6b579a6", "typeName": "hive_column" }, ...]
parameters: { "transient_lastDdlTime": "1466403208"}
viewOriginalText: null
viewExpandedText: null
tableType: “MANAGED_TABLE”
temporary: false

从上面的例子中可以注意到以下几点:

  • 实体类型的每个实例都由唯一标识符GUID标识。此GUID由Atlas服务器在定义对象时生成,并在实体的整个生命周期内保持不变。在任何时间点,都可以使用其GUID访问此特定实体。

    • 在此示例中,默认数据库中的“customers”表由GUID“9ba387dd-fa76-429c-b791-ffc338d3c91f”唯一标识。
  • 实体具有给定类型,并且类型的名称随实体定义一起提供。

    • 在此示例中,'customers'表是'hive_table'类型。
  • 该实体的值是hive_table类型定义中定义的属性的所有属性名称及其值的映射。

    属性值将根据属性的数据类型。实体类型属性将具有AtlasObjectId类型的值

有了实体的这个设计,我们现在可以看到Entity和Struct元类型之间的区别。实体(Entity)和结构(Entity)都构成其他类型的属性。但是,实体类型的实例具有标识(具有GUID值),并且可以从其他实体引用(例如,从hive_table实体引用hive_db实体)。 Struct类型的实例没有自己的标识。 Struct类型的值是在实体本身内“嵌入”的属性集合。

3. Attributes(属性)

我们已经看到,属性(attributes)是在实体(Entity),结构(Struct),分类(Classification)和关系(Relationship)等元类型中定义的。但我们将属性列举为具有名称和元类型值。然而,Atlas中的attributes具有一些properties,这些properties定义了与类型系统相关的更多概念。

attributes具有以下properties:

name:        string,
typeName: string,
isOptional: boolean,
isIndexable: boolean,
isUnique: boolean,
cardinality: enum

上述属性具有以下含义:

  • name: 属性的名称

  • dataTypeName: 属性的元类型名称(native, collection, composite))

  • isComposite:

    • 该标志表示建模的一个方面。如果将属性定义为复合(composite),则意味着它不能具有独立于其所包含的实体的生命周期。这个概念的一个很好的示例是构成hive表的一部分的列集。由于列在hive表外部没有意义,因此它们被定义为复合属性。
    • 必须在Atlas中创建复合属性及其包含的实体。即,必须与hive表一起创建配置单元列。
  • isIndexable

    • 标志指示是否应该对此属性建立索引,以便可以使用属性值作为谓词来执行查找,并且可以有效地执行查找。
  • isUnique

    • 同样与索引相关。如果指定为唯一,则表示在JanusGraph中为此属性创建了一个特殊索引,允许基于相等的查找。
    • 具有该标志的真值的任何属性都被视为主键,以将该实体与其他实体区分开。因此,应该注意确保此属性确实在现实世界中为唯一属性建模。
      • 对于例如考虑hive_table的name属性。在单独的情况下,名称不是hive_table的唯一属性,因为具有相同名称的表可以存在于多个数据库中。如果Atlas在多个集群中存储hive表的元数据,那么即使是一对(数据库名称,表名)也不是唯一的。在物理世界中,只有集群位置,数据库名称和表名称才能被视为唯一。
  • multiplicity: 标示该属性是必选(required),可选(optional)的还是可以是多值的(multi-valued)。如果实体的属性值定义与类型定义中的多重性声明不匹配,则这将违反约束,并且实体添加将失败。因此,该字段可用于定义元数据信息的一些约束。

根据上面的内容,让我们展开下面的hive表的一个attributes的属性定义。让我们看一下名为'db'的属性,它表示hive表所属的数据库:

db:
"name": "db",
"typeName": "hive_db",
"isOptional": false,
"isIndexable": true,
"isUnique": false,
"cardinality": "SINGLE"

请注意“isOptional = true”约束 - 如果没有db引用,则无法创建表实体。

columns:
"name": "columns",
"typeName": "array<hive_column>",
"isOptional": optional,
"isIndexable": true,
“isUnique": false,
"constraints": [ { "type": "ownedRef" } ]

请注意列的“ownedRef”约束。通过这样,我们指出定义的列实体应始终绑定到它们所定义的表实体。

通过此描述和示例,您将能够意识到属性定义可用于影响Atlas系统强制执行的特定建模行为(约束,索引等)。

4. 系统特定类型及含义

Atlas自带了一些预定义的系统类型。我们在前面的部分中看到了一个示例(DataSet)。在本节中,我们将看到更多这些类型并了解它们的重要性。

  • Referenceable:该类型表示可以使用名为qualifiedName的唯一属性搜索的所有实体。

  • Asset:该类型扩展了Referenceable并添加了名称,描述和所有者等属性。 Name是必需属性(isOptional = false),其他属性是可选的。

Referenceable和Asset的目的是为建模者提供在定义和查询自己类型的实体时强制一致性的方法。拥有这些固定的属性集允许应用程序和用户界面基于约定做出关于默认情况下它们可以期望类型的属性的假设。

  • Infrastructure:该类型继承自Asset,通常可用作基础结构元数据对象(如集群,主机等)的常见超类型。

  • DataSet:该类型继承自Referenceable。从概念上讲,它可以用于表示存储数据的类型。在Atlas中,hive表,hbase_tables等都是从DataSet扩展的类型。扩展DataSet的类型可以预期具有Schema,因为它们具有定义该数据集的属性的属性。对于例如hive_table中的columns属性。此外,扩展DataSet的类型实体参与数据转换,Atlas可以通过血缘)图了解到转换过程。

  • Process:该类型继承自Asset。从概念上讲,它可以用于表示任何数据转换操作。例如,将具有原始数据的配置单元表转换为存储某些聚合的另一个配置单元表的ETL过程可以是扩展Process类型的特定类型。流程类型有两个特定属性,即输入和输出。输入和输出都是DataSet实体的数组。因此,Process类型的实例可以使用这些输入和输出来捕获DataSet的血缘如何演变。

使用Atlas进行元数据管理之Type(类型)的更多相关文章

  1. 使用Atlas进行元数据管理之Atlas简介

    背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获. 元数据管理系列文章: [0] - 使用Atlas进行元数据 ...

  2. 使用Atlas进行元数据管理之Glossary(术语)

    背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获. 元数据管理系列文章: [0] - 使用Atlas进行元数据 ...

  3. 使用Atlas进行元数据管理之容错和高可用

    1. 介绍 Apache Atlas使用各种系统并与之交互,为数据管理员提供元数据管理和数据血缘信息.通过适当地选择和配置这些依赖关系,可以使用Atlas实现高度的服务可用性.本文档介绍了Atlas中 ...

  4. 数据治理之元数据管理的利器——Atlas入门宝典

    随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程.作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置.但是其官方文档不是很丰富,也不够详细.所以整 ...

  5. Apache Atlas元数据管理从入门到实战(1)

    一.前言   元数据管理是数据治理非常重要的一个方向,元数据的一致性,可追溯性,是实现数据治理非常重要的一个环节.传统数据情况下,有过多种相对成熟的元数据管理工具,而大数据时代,基于hadoop,最为 ...

  6. Oracle Enterprise Metadata Management (简称OEMM,Oracle元数据管理)12.1.3.0.1已经发布

    在数据处理及数据仓库建设中,元数据管理是必不可少的,OEMM可以解决元数据管理过程中各种关键业务问题和技术挑战,其中包括如何元数据的统计信息,了解变更数据之后对下游的影响范围,而且OEMM站在业务的角 ...

  7. HDFS元数据管理机制

    元数据管理概述 HDFS元数据,按类型分,主要包括以下几个部分: 1.文件.目录自身的属性信息,例如文件名,目录名,修改信息等. 2.文件记录的信息的存储相关的信息,例如存储块信息,分块情况,副本个数 ...

  8. 元数据管理的重要性 - xms

    什么是元数据?引用百科的描述就是:元数据(Metadata),又称中介数据.中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息: 看起来有点抽象 ...

  9. 【收藏】关于元数据(Metadata)和元数据管理,这是我的见过最全的解读!

    本文主要从元数据的定义.作用.元数据管理现状.管理标准和元数据管理功能等方面讲述了我对元数据(Metadata)和元数据管理的认知及理解. 元数据管理 一.元数据的定义 按照传统的定义,元数据(Met ...

随机推荐

  1. BZOJ_1803_Spoj1487 Query on a tree III_主席树+dfs序

    BZOJ_1803_Spoj1487 Query on a tree III_主席树 Description You are given a node-labeled rooted tree with ...

  2. VMware workstation创建虚拟机console图文

    1. 概述2. 配置入口3. 新建虚拟机向导3.1 类型配置3.2 硬件兼容性3.3 操作系统安装3.4 客户机操作系统类型3.5 客户机的名称位置4. 客户机硬件配置选择4.1 客户机处理器配置4. ...

  3. 从壹开始前后端 [vue后台] 之一 || 权限后台系统 1.0 正式上线

    缘起 哈喽各位小伙伴周三好,春节已经过去好多天了,群里小伙伴也各种催搞了,新年也接了新项目,比较忙,不过还是终于赶上这个二月的尾巴写了这篇文章,也把 vue 权限后台上线了(项目地址:http://1 ...

  4. Android根据word模板文档将表单数据生成word文档的方案整理

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 尝试的方案包括以下几种: freemarker 只能在java项目上运行,无法在Android项目上运行: 参考资料:<Fre ...

  5. kube-proxy的功能

    Kube-proxy的功能 我们知道POD的IP是动态分配的而且经常会变,所以为了可以通过一个不太容易变化的IP访问POD就会使用一个叫做service的东西,通过标签选择器和POD进行关联. Ser ...

  6. .Net 反射学习

    Why?为什么使用反射 MVC ORM EF 都是用的反射.反射可以让程序的扩展性,灵活性得到加强.一起即可动态创建   what 反射原理    动态加载类库 ,先添加引用类库,或者复制debug里 ...

  7. maven私服上传jar包

    将一下脚本保存在.bat文件执行,红色部分按实际情况修改: @echo off set groupId=com.xxxset artifactId=xxxset version=0.0.1set ja ...

  8. ArcGIS消除图斑重叠错误

    在生产中,经常会遇见有图斑重叠这种拓扑错误的矢量,大部分情况下,需要人工比对影像处理.但是如果只需要用到这些矢量的形状.面积,可以在ArcMap中用以下方法,快速消除图斑重叠错误,不必手工处理. 如下 ...

  9. Flutter 即学即用系列博客——02 一个纯 Flutter Demo 说明

    前言 上一篇文章我们搭建好了 Flutter 的开发环境. Flutter 即学即用--01 环境搭建 这一篇我们通过 Flutter 的一个 Demo 来了解下 Flutter. 开发系统:MAC ...

  10. 编程心法 之 敏捷开发(新架构)Agile Team Organization Squads, Chapters, Tribes and Guilds

    Agile Team 参考 一般情况下,一个小组有以下功能分布: Squads 每个主要的功能的开发属于一个Squad,比如说QQ这个应用,可以分为QQ空间小组.QQ会员小组等等, 每一个Squad有 ...