我爱编程

类型系统(Type System)

2018-07-25  本文已影响0人  jupiter_2000

概览

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中的一个“实体”是一个实体类型的特殊值或实例,也表征了真实世界中的元数据对象。类比面向对象编程语言,一个实例是特定类的一个对象。
一个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

以上示例中的要点:

实体(Entity)与结构(Struct)元类型都是由其他类型属性组合而成。然而,实例类型的实例拥有一个标识(GUID值),可以被其他实例引用(比如hive_db实体引用hive_table实体)。结构类型没有标识。结构类型的值是所有属性的集合。

属性

一个属性拥有以下的内容:

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

如果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。这里我们列举了更多的系统类型,以及它们的重要作用。

上一篇 下一篇

猜你喜欢

热点阅读