概览
Atlas允许用户定义元数据对象(metadata object)模型,即CWM(Common Warehouse Meta model,公共仓库元模型)中的M2。该模型由称之为“类型”(type)的东西组成。类型的实例称之为“实体”(entity),它便是实际待管理的元数据对象。类型系统是一个提供给用户定义和管理类型与实体的组件。所有Atlas中可管理的、立即可用的元数据对象都是由特定类型模型下的实体开描述的。为了在Atlas中存储新类型的元数据,我们需要理解类型系统组件中的概念。
类型(type)
在Atlas中“类型”是对一个特定类别元数据对象如何存储和访问的定义。一个类型描述了一项属性或一组属性集合,而这些属性定义了元数据对象所包含的内容。有开发背景的用户可将类型类比理解为面向对象编程语言中的类,或者是关系型数据库中的表模式(table schema)。
下面是在Atlas中定义的一个名为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中每一个类型都通过唯一的名字来标识。
- 每一个类型都有一个元类型(metatype)。Atlas有如下的元类型:
1.基本元类型:boolean, byte, short, int, long, float, double, biginteger, bigdecimal, string, date
2.枚举元类型(Enum metatypes)
3.集合元类型:array, map
4.复合元类型:Entity, Struct, Classification, Relationship - Entity & Classification可以继承其他类型,被继承的类型称为supertype。这样做的好处是,类型可以继承获得超类型的属性。建模者可以将一些公共属性定义在超类型中。比如示例中hive表就是继承自DataSet。
- 具有‘Entity’, ‘Struct’, ‘Classification’ or 'Relationship'元类型的类型可拥有一个属性集合。其中每一项属性都有一个名词及与之对应的取值。属性可通过表达式type_name.attribute_name来引用。比如hive_table.name是String,hive_table.aliases是String数组,hive_table.db引用了hive_db类型的一个实例 。
实体
Atlas中的一个“实体”是一个实体类型的特殊值或实例,也表征了真实世界中的元数据对象。类比面向对象编程语言,一个实例是特定类的一个对象。
一个Hive表的实例就是一个实体。假设在“default”数据库中有个名为“customers”的hive表。该表就是hive表类型的一个实体。
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来访问这个对象。
- 一个实体实例的values是一个map,该map的key为对应类型中定义属性的名称,value为属性的取值。
- 属性的取值必须与类型中定义的属性类型保持一致。实体类型(Entity-type)的属性拥有一个AtlasObjectId类型的取值。
实体(Entity)与结构(Struct)元类型都是由其他类型属性组合而成。然而,实例类型的实例拥有一个标识(GUID值),可以被其他实例引用(比如hive_db实体引用hive_table实体)。结构类型没有标识。结构类型的值是所有属性的集合。
属性
一个属性拥有以下的内容:
name: string,
typeName: string,
isOptional: boolean,
isIndexable: boolean,
isUnique: boolean,
cardinality: enum
- name - 属性的名称。
- typeName - 属性的元类型名称。
- isComposite - 这个标识了建模的考虑。如果一个属性被标记为复合的(composite),那么就表明这个属性不能脱离包含它的实体而存在。比如一个hive表的字段不能脱离表存在。一个复合属性必须在Atlas与包含的实体一起创建。
- isIndexable - 标识是否在该属性上建立了索引
- isUnique - 是否时唯一索引。任何标记设置为真的属性,都可以作为区分实体的主键。
- multiplicity - 值是该属性是必须的,可选的,多值的其中之一。
如果isOptional=true,那么创建表实体时必须可以引用到db实体
db:
"name": "db",
"typeName": "hive_db",
"isOptional": false,
"isIndexable": true,
"isUnique": false,
"cardinality": "SINGLE"
注意到列属性定义中的ownedRef约束。这使得我们在定义列实体必须与对应的表实体绑定起来。
columns:
"name": "columns",
"typeName": "array<hive_column>",
"isOptional": optional,
"isIndexable": true,
“isUnique": false,
"constraints": [ { "type": "ownedRef" } ]
系统特殊类型和它们的重要性
Atlas预定了一些系统类型,比如DataSet。这里我们列举了更多的系统类型,以及它们的重要作用。
- Referenceable:该类型表示,它的所有实体都可以通过叫做qualifiedName的唯一属性查询到。
- Asset: 该类型扩展自Referenceable,并增加了诸如name,description和owner等属性。name是必选属性,其他为可选属性。提供Referenceable和Asset的目的是,让建模者在定义和查询他们自定义类型时能具备强一致性。具有这些固定的属性集,能让应用和用户接口开发时有这样的属性假设,即默认这些属性已经才能在。
- Infrastructure: 该类型扩展自Asset,一般可作为基础上设施元数据对象(如集群,主机等)的公用超类型。
- DataSet:该类型扩展自Referenceable。概念上,它用于描述一种存储数据的类型。在Atlas中,hive表,hbase表等都可以从DataSet扩展而来。从DataSet类型扩展而来的类型都将拥有一个模式(schema),即有一个属性定义了该数据集的列(字段或属性),比如hive表中columes字段。所有DataSet扩展类型的实体都会参与数据转换(transformation),而这种转换会通过Atlas的血缘图记录下来。
- Process:该类型扩展自Asset。概念上,它用于描述任何数据转换的操作。例如,一个ETL处理过程可以是Process扩展类型的实例,而该ETL处理过程可将原始数据转换成存储到一个存放聚合数据的hive表中。Process类型有两个特别的属性,输入和输出。输入和输出都是DataSet实例数组类型的。因此,一个Process类型的实例可用输入和输出属性来展示数据的血缘关系。
网友评论