Azure Synapse中三角洲湖和湖泊数据库之间的差异



我正在Azure Synapse中构建一个湖屋架构,我不确定是使用德尔塔湖还是使用莱克数据库。

两者似乎具有大致相同的功能——我可以使用Spark来执行ETL任务——然后使用Spark池和无服务器sql池来查询数据。

在Azure文档中,湖泊数据库定义为:

"lake数据库在一个或多个上提供关系元数据层数据湖中的文件。您可以创建一个湖泊数据库,其中包括表的定义,包括列名和数据类型作为主键列和外键列之间的关系。表格数据湖中的引用文件,使您能够应用关系语义到处理数据和使用SQL查询数据。然而数据文件的存储与数据库模式解耦;实现了比关系数据库系统更大的灵活性优惠">

而三角洲湖被定义为:

Delta Lake是一个开源存储层,它添加了关系数据库语义到基于Spark的数据湖处理。三角洲湖在PySpark、Scala的Azure Synapse Analytics Spark池中支持,和NET代码。

在Synapse Analytics Spark池中使用Delta Lake的好处包括:

支持查询和数据修改的关系表。具有您可以将数据存储在支持CRUD的表中(创建,读取、更新和删除(操作。换句话说,您可以选择,插入、更新和删除数据行的方式与在关系数据库系统。

Azure Synapse中的Delta lake和lake数据库(如果有(之间有什么区别?或者它们只是两种不同的工具来实现大致相同的结果?使用一个比另一个有具体的好处吗?

Lake数据库是Microsoft添加到Synapse Analytics的一个工具,它使用Spark SQL(Hive(管理的表为Parquet、csv或Delta表提供数据库抽象层。它使用Hive Metastore,它可以跟踪数据库内容:表、架构、视图等。如果在其中使用Delta表,您将拥有作为Delta Lake更改跟踪的一部分的所有附加元数据,但Delta表元数据不属于Lake database Metastore。我使用的是德尔塔湖的免费Linux发行版。

如果您正确配置了您的三角洲湖,您可以将其作为湖数据库显示在Synapse Studio中。Lake数据库的一个优点是,在Synapse数据流中,您可以使用工作区DB源类型而不是集成数据集,该类型适用于Lake数据库,它使用数据库和表模型,而不是使用必须定义的一堆集成数据集。

我正在为一个客户设置这个程序,但仍在发现细节。对于不同的部分,文档是丰富的,但对于整体,如何配置它,以及它如何协同工作,都不存在。因此,请原谅这里的任何不准确的陈述。要将开源的三角洲湖集成到湖泊数据库和Synapse管道中,需要了解许多细微差别。这个堆栈所得到的应该与Delta Lake的Databricks版本所得到的类似,只是这里的配置完全取决于您,您必须运气好才能弄清楚。

SQL操作在lake数据库中受到限制。看起来你可以插入和选择,但不能更新和删除。

此外,在lake数据库中创建的表是EXTERNAL或UNMANAGED Spark表;也就是说,Spark表只管理元数据,但数据位于不同的位置(ADLS(。因此,DROP TABLE命令只会删除元数据,而不会删除底层数据。

最新更新