生成代理键的标识列现在可在您附近的湖屋!
什么是单位列?
一个标识列是数据库中的一列,它自动为每一行数据生成一个唯一的ID号。这个数字与行内容无关。
单位列是代理键。在数据仓库中,通常使用一个额外的键(称为代理键)来唯一地标识每一行并跟踪数据随时间的变化。此外,建议使用代理键而不是自然键。代理键是系统生成的,不依赖于几个字段来标识行的唯一性。
因此,标识列用于创建代理键,可以用作主键和外键在用于数据仓库和数据集市的维度模型中。如下所示,这些键是传统维度模型(如星型模式)中连接不同表的列。
在数据湖上生成代理键的传统方法
大多数大数据技术使用并行性,即将一项任务划分为可以同时完成的更小部分的能力,以提高性能。在数据湖的早期,没有简单的方法在一组机器上创建唯一的序列。这导致一些数据工程师使用不太可靠的方法来生成没有适当功能的代理键,例如:
monotonically_increasing_id (),
row_number (),
排名,
ZipWithIndex (),
ZipWithUniqueIndex (),
- 使用
散列(),
而且 - 使用
md5 ()
.
虽然这些函数能够在某些情况下完成工作,但它们通常充满了关于稀疏填充序列、大规模性能问题和并发事务问题的许多警告和警告。
数据库已经能够生成序列从早期开始,在集中式事务管理器的帮助下生成代理键来惟一地标识一行数据。但是,典型的实现需要锁和事务提交,这很难管理。
Delta Lake上的标识列更容易生成代理键
标识列解决了上面提到的问题,并为生成代理键提供了一个简单的、高性能的解决方案。Delta Lake是第一个为代理键生成启用标识列的数据湖协议。
三角洲湖现在支持创建身份
列,可以在加载新行时自动生成唯一的、自动递增的ID号。虽然这些ID号码可能不是连续的,但达美航空尽最大努力使差距尽可能小。您可以使用此功能轻松地为数据仓库工作负载创建代理键。
如何使用SQL和Delta湖创建具有标识列的代理键
[推荐]生成Always As Identity
在SQL中创建标识列与创建Delta Lake表一样简单。声明列时,添加名为id
,或任何您喜欢的数据类型长整型数字
,然后进入总是以恒等式生成
.
现在,每当您在该表上执行插入数据的操作时,请从插入中省略此列,Delta Lake将自动为身份
列表示插入到Delta Lake表中的每一行。
以下是Delta Lake中如何使用标识列的简单示例:
创建或取代表格演示(id长整型数字生成的总作为身份,product_type字符串,销售长整型数字);
展望未来,以"id
每当您向表中插入新记录时,都会自动递增。然后你可以像这样插入新数据:
插入成演示(product_type, sales)值(“电池”,150000);
注意标题为"id
是缺失的插入
这是声明的一部分。Delta Lake将在将表写入云对象存储(例如AWS S3、Azure Data Lake storage或谷歌cloud storage)时填充代理键。BOB低频彩欲知详情,请浏览文档.
默认生成
还有默认生成为标识
选项,该选项允许覆盖标识插入,而总是
选项不能被覆盖。
在采用这个新特性时,您应该记住一些注意事项。标识列不能添加到现有表中;需要使用添加的新标识列重新创建这些表。为此,只需创建一个带有标识列的新表DDL,并将现有列插入到新表中,就会为新表生成代理键。
今天开始使用Databricks SQL上的Delta Lake标识列
在Databricks Runtime 10.4+和Databricks SQL 2022.17+中,标识列现在是GA(一般可用)。有了标识列,你现在可以让你所有的数据仓库工作负载都拥有Lakehouse架构的所有好处,并通过Photon加速。今天就试试Databricks SQL上的身份列吧.