Databricks Lakehouse中的数据对象

Databricks Lakehouse将使用Delta Lake存储在云对象存储中的数据以熟悉的关系(如数据库、表和视图)进行组织。该模型将数据仓库的许多优点与数据湖的可伸缩性和灵活性结合在一起。BOB低频彩了解关于此模型如何工作以及对象数据和元数据之间关系的更多信息,以便在为您的组织设计和实现Databricks Lakehouse时应用最佳实践。

Databricks Lakehouse中有哪些数据对象?

Databricks Lakehouse架构将在云对象存储中用Delta Lake协议存储的数据与注册到的元数据结合在一起metastore.Databricks Lakehouse中有五个主要对象:

  • 目录:一组数据库。

  • 数据库或模式:目录中对象的分组。数据库包含表、视图和函数。

  • 表格:对象存储系统中以数据文件形式存储的行和列的集合。

  • 视图:通常针对一个或多个表或数据源保存的查询。

  • 函数:保存的逻辑,返回一个标量值或一组行。

Unity Catalog对象模型图

有关使用Unity Catalog保护对象的信息,请参见可安全对象模型

什么是亚转移?

亚矿包含定义湖屋中数据对象的所有元数据。Databricks提供以下metastore选项:

  • 统一目录:您可以创建一个metastore来存储和跨多个Databricks工作区共享元数据。Unity Catalog在帐户级别进行管理。

  • 蜂巢metastore: Databricks将内置Hive metastore的所有元数据存储为托管服务。metastore的一个实例部署到每个集群,并从每个客户工作区的中央存储库安全地访问元数据。

  • 外部metastore:你也可以把你自己的metastore带到Databricks。

无论使用哪种metastore, Databricks都将与客户配置的对象存储中的表相关的所有数据存储在其云帐户中。

什么是目录?

目录是Databricks Lakehouse关系模型中最高的抽象(或最粗的粒度)。每个数据库都将与一个目录相关联。目录作为对象存在于一个亚矿中。

在Unity Catalog引入之前,Databricks使用了两层命名空间。目录是Unity Catalog命名空间模型中的第三层:

catalog_namedatabase_nametable_name

内置的Hive metastore只支持单个目录,hive_metastore

什么是数据库?

数据库是数据对象的集合,如表或视图(也称为“关系”)和函数。在Databricks中,术语“模式”和“数据库”可以互换使用(而在许多关系系统中,数据库是模式的集合)。

数据库将始终与云对象存储上的某个位置相关联。您可以选择指定位置注册数据库时,请记住:

  • 位置与数据库关联的位置总是被认为是托管位置。

  • 创建数据库不会在目标位置创建任何文件。

  • 位置将确定注册到该数据库的所有表的数据的默认位置。

  • 成功删除数据库将递归地删除存储在托管位置中的所有数据和文件。

由数据库和数据文件管理的位置之间的交互非常重要。为了避免意外删除数据:

  • 不要在多个数据库定义之间共享数据库位置。

  • 不要将数据库注册到已经包含数据的位置。

  • 若要独立于数据库管理数据生命周期,请将数据保存到没有嵌套在任何数据库位置下的位置。

什么是表?

Databricks表是结构化数据的集合。Delta表将数据存储为云对象存储上的文件目录,并在编目和模式中将表元数据注册到metastore。由于Delta Lake是Databricks中创建的表的默认存储提供程序,因此Databricks中创建的所有表默认都是Delta表。由于Delta表将数据存储在云对象存储中,并通过metastore提供对数据的引用,因此整个组织的用户可以使用他们首选的api访问数据;在Databricks上,这包括SQL, Python, PySpark, Scala和R。

注意,可以在Databricks上创建不是Delta表的表。这些表不是由Delta Lake支持的,并且不会提供ACID事务和优化的Delta表性能。属于此类别的表包括针对中的数据注册的表外部系统和针对数据湖中的其他文件格式

在Databricks中有两种表格,管理而且非托管(或外部)表。

请注意

Delta活动表直播表和流直播表之间的区别不是从表的角度强制执行的。

什么是托管表?

Databricks管理一个托管表的元数据和数据;删除表时,也会删除底层数据。数据分析师和其他主要使用SQL的用户可能更喜欢这种行为。创建表时默认使用托管表。托管表的数据驻留在位置它注册到的数据库的。数据位置和数据库之间的这种托管关系意味着,为了将托管表移动到新数据库,必须将所有数据重写到新位置。

创建托管表的方法有很多种,包括:

创建表格table_name作为选择another_table
创建表格table_namefield_name1INTfield_name2字符串
dfsaveAsTable“table_name”

什么是非托管表?

Databricks只管理非托管(外部)表的元数据;删除表时,不会影响底层数据。非托管表将始终指定位置在表创建期间;您可以将现有的数据文件目录注册为表,也可以在首次定义表时提供路径。由于数据和元数据是独立管理的,因此可以重命名表或将其注册到新数据库,而不需要移动任何数据。数据工程师通常更喜欢非托管表以及它们为生产数据提供的灵活性。

创建非托管表的方法有很多种,包括:

创建表格table_name使用δ位置/道路/ /现有数据的
创建表格table_namefield_name1INTfield_name2字符串位置/ /空/目录/路径的
df选项“路径”/ /空/目录/路径”saveAsTable“table_name”

什么是视图?

视图通常存储针对metastore中的一个或多个数据源或表的查询的文本。在Databricks中,视图相当于数据库中作为对象持久化的Spark DataFrame。与DataFrames不同,您可以从Databricks产品的任何部分查询视图,前提是您拥有这样做的权限。创建视图不处理或写入任何数据;只有查询文本被注册到关联数据库中的metastore。

什么是临时视图?

临时视图具有有限的作用域和持久性,并且没有注册到模式或编目。临时视图的生存期根据你所使用的环境而不同:

  • 在笔记本和作业中,临时视图的作用域是笔记本或脚本级别。它们不能在声明它们的笔记本之外被引用,并且当笔记本从集群中分离时,它们将不再存在。

  • 在Databricks SQL中,临时视图的作用域是查询级别。同一个查询中的多个语句可以使用临时视图,但不能在其他查询中引用它,即使在同一个仪表板中也是如此。

  • 全局临时视图的作用域是集群级别,可以在共享计算资源的笔记本电脑或作业之间共享。Databricks建议使用带有适当表acl的视图,而不是全局临时视图。

什么是函数?

函数允许您将用户定义的逻辑与数据库关联。函数可以返回标量值或行集。函数用于聚合数据。Databricks允许您根据执行上下文以各种语言保存函数,广泛支持SQL。可以使用函数在Databricks产品上跨各种上下文提供对自定义逻辑的托管访问。

关系对象如何在Delta活动表中工作?

Delta活动表使用声明性语法定义和管理DDL、DML和基础设施部署。Delta Live Tables在逻辑规划和执行过程中使用了“虚拟模式”的概念。Delta Live Tables可以与Databricks环境中的其他数据库交互,通过在管道配置设置中指定目标数据库,Delta Live Tables可以发布和持久化表以供在其他地方查询。在Delta Live tables中创建的所有表都是Delta表,可以声明为托管表或非托管表。

虽然可以在Delta Live table中声明视图,但这些视图应该被视为管道范围内的临时视图。Delta Live tables中的临时表是一个独特的概念:这些表将数据持久化到存储中,但不将数据发布到目标数据库。

一些操作,如应用变化,将表和视图同时注册到数据库;表名将以下划线(_),视图将表名声明为应用变化操作。视图查询相应的隐藏表以实现结果。