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

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唯一标识

类型具有元类型。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的预定义超类型扩展。稍后将提供有关此预定义类型的更多详细信息。

具有元类型Entity,Struct,Classification或Relationship的类型可以具有属性的集合。每个属性都有一个名称(例如: 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中的entity是type的特定值或实例,因此表示现实世界中的特定元数据对象。用我们对面向对象编程语言的类比,实例(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类型的值

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsgdg.html