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

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
简介:

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

元数据系列文章:
[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唯一标识
  • 类型具有元类型。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的血缘如何演变。

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
目录
相关文章
|
SQL 分布式计算 Java
数据治理之元数据管理的利器——Atlas入门宝典(二)
随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程。作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置。但是其官方文档不是很丰富,也不够详细。所以整理了这份文档供大家学习使用。
2877 1
数据治理之元数据管理的利器——Atlas入门宝典(二)
|
6月前
|
分布式计算 数据管理 Hadoop
元数据管理平台对比预研 Atlas VS Datahub VS Openmetadata
元数据管理平台对比预研 Atlas VS Datahub VS Openmetadata
1461 57
|
存储 消息中间件 分布式计算
数据治理之元数据管理的利器——Atlas入门宝典(一)
随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程。作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置。但是其官方文档不是很丰富,也不够详细。所以整理了这份文档供大家学习使用。
1674 0
数据治理之元数据管理的利器——Atlas入门宝典(一)
|
3月前
|
物联网 数据管理 Apache
拥抱IoT浪潮,Apache IoTDB如何成为你的智能数据守护者?解锁物联网新纪元的数据管理秘籍!
【8月更文挑战第22天】随着物联网技术的发展,数据量激增对数据库提出新挑战。Apache IoTDB凭借其面向时间序列数据的设计,在IoT领域脱颖而出。相较于传统数据库,IoTDB采用树形数据模型高效管理实时数据,具备轻量级结构与高并发能力,并集成Hadoop/Spark支持复杂分析。在智能城市等场景下,IoTDB能处理如交通流量等数据,为决策提供支持。IoTDB还提供InfluxDB协议适配器简化迁移过程,并支持细致的权限管理确保数据安全。综上所述,IoTDB在IoT数据管理中展现出巨大潜力与竞争力。
108 1
|
4月前
|
SQL NoSQL 数据管理
数据管理DMS使用问题之如何批量导入MongoDB的数据文件
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
22天前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
1月前
|
存储 人工智能 安全
【荣誉奖项】荣获2024数据治理优秀产品!瓴羊Dataphin联合DAMA发布数据管理技能认证
瓴羊Dataphin连续俩年获得DAMA年度优秀数据治理产品奖,本次与DAMA联合发布“DAMA x 瓴羊 数据管理技能认证”,助力提升全民数据素养。
148 0
【荣誉奖项】荣获2024数据治理优秀产品!瓴羊Dataphin联合DAMA发布数据管理技能认证
|
1月前
|
数据采集 安全 数据管理
通信行业数据治理:如何实现高效、安全的数据管理?
在未来的发展中,通信行业的企业应加强数据治理意识,提高数据治理能力;同时,积极开展跨行业的合作创新,共同推动行业的繁荣与发展。相信在不久的将来,通信行业将迎来更加美好的明天。
下一篇
无影云桌面