Type System
Atlas允许用户为他们要管理的元数据对象定义模型。该模型由称为“类型”的定义组成。称为“实体”的“类型”的实例表示受管理的实际元数据对象。Type System是允许用户定义和管理Type 和Entity的组件。开箱即用的Atlas管理的所有元数据对象(例如,像Hive表)都使用Type 进行建模,并表示为实体。为了在Atlas中存储新类型的元数据,需要了解类型系统组件的概念。
Types
Atlas中的Type是对如何存储和访问特定类型的元数据对象的定义。Type代表一个或一组属性,这些属性定义元数据对象的属性。具有开发背景的用户将认识到类型与面向对象编程语言的“类”定义或关系数据库的“table schema”相似。以下是Atlas内部定义EntityType的一个Referenceable类型的定义,该类型定义的JSON格式如下:
{
"entityDefs": [
{
"name": "Referenceable",
"superTypes": [],
"serviceType": "atlas_core",
"typeVersion": "1.0",
"attributeDefs": [
{
"name": "qualifiedName",
"typeName": "string",
"cardinality": "SINGLE",
"isIndexable": true,
"isOptional": false,
"isUnique": true
},
{
"name": "replicatedFrom",
"typeName": "array<AtlasServer>",
"cardinality": "SET",
"isIndexable": false,
"isOptional": true,
"isUnique": false,
"options": {
"isSoftReference": "true"
}
},
{
"name": "replicatedTo",
"typeName": "array<AtlasServer>",
"cardinality": "SET",
"isIndexable": false,
"isOptional": true,
"isUnique": false,
"options": {
"isSoftReference": "true"
}
}
]
}
]
}
这里需要注意在Atlas中所有的Type在定义的时候必须使用唯一的unique的name属性,其中所有类型都必须有个MetaType类型,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类型可以从称为“superTypes”的其他类型“extends”-凭借此特性,它也将包括在superTypes中定义的属性。这使建模者可以在一组相关Type类型中定义公共属性。这再次类似于面向对象语言如何为类定义超类的概念。
对于元数据类型是Entity、Struct、Classification或者Relationship的类型可以有一个attributes属性,每个Attribute属性有一个name和一些其他的关联属性。当需要访问具体的属性的时候用户可以使用type_name.attribute_name方式获取对应的属性。同时可以注意到这些属性本身的定义也是使用Atlas的元数据类型定义的。
在上述的例子中Referenceable.qualifiedName是一个string类型,Referenceable.replicatedFrom是一个array类型,Referenceable.meanings是一个引用了array类型
定义一个自定义的类型继承自Referenceable类型