如何使用Azure数据工厂创建元数据驱动的数据管道

55 阅读8分钟

在这篇文章中,我们将学习如何使用Azure Data Factory构建元数据驱动的管道。

简介

多年来,数据管理方法经历了许多迭代,如在线事务处理(OLTP)、数据仓库和数据集市、在线分析处理(OLAP)、数据湖,以及最后在云时代越来越受欢迎的数据湖馆概念。虽然有各种类型的数据管理平台和产品,以及同样不同的方法来调整这些工具和技术来管理数据,但有一个工件是所有这些的核心,即智能数据管道。随着数据的增长超出了关系型和结构型数据模型的范围,对数据管道元数据驱动的需求越来越大,这对于处理云端数据湖中通常出现的各种类型和数量的数据特别有用。

随着时间的推移,数据管道的一个主要挑战是,数据管道的开发开始于一个适度的水平,从源头到目的地的点对点连接。随着数据规模的增长和数据对象的模式随着时间的推移而变化,要配合开发新的点对点数据管道以及维护现有的数据管道的速度,变得越来越具有挑战性和低效率。至少,处理只是从较新的数据对象中摄取数据的数据管道可以成为元数据驱动的起点,以减少相同的数据管道的数量,只是在来源和目的地方面有所不同。Azure云支持各种数据管理产品和平台,从数据管道的角度来看,它们可以是源头或目的地。Azure数据工厂是Azure提供的建立数据管道的主要产品,我们将看到如何使用它创建元数据驱动的管道。

前提条件

假设我们有一个用例,我们在Azure云上有一个引导数据湖,它是由Azure Blob存储或Azure数据湖存储组成的,来自多个来源的数据被整理、分类和策划。我们有一个Azure SQL服务器,作为下游系统之一,需要从这个数据湖中获取部分数据进行某种类型的数据处理。这些目的地可以是任何东西,如Azure Synapse、Azure Databricks Delta Lake或任何非Azure原生的第三方数据管理产品。为了简单起见,我们考虑将Azure SQL Server作为数据源。我们打算建立元数据驱动的管道,使用Azure Data Factory将感兴趣的数据文件从数据湖中源源不断地送到Azure SQL数据库中。

作为一个前提条件,我们假设拥有一个Azure云账户,并具有管理本文将使用的服务的必要权限。我们需要创建一个Azure Blob存储账户,并在该账户的一个文件夹中至少托管一个数据文件。我们还需要一个Azure SQL Server账户,并在其中创建一个Azure SQL数据库,该数据库将作为本案例中的目标。我们需要创建一个Azure数据工厂工作区,用它来访问Azure数据工厂工作室,我们将从那里编写元数据驱动的数据管道。假设这个设置已经到位,所有的服务都配置了防火墙规则,允许相互访问。

开发元数据驱动的数据管道

一旦我们进入Azure Data Factory门户,我们就能看到如下所示的主页。我们打算开发一个数据管道,从数据湖摄取数据,所以我们将选择摄取选项,如下图所示。

image.png

它将调用复制任务向导,如下图所示。我们可以选择使用内置的复制任务来编写数据管道或数据任务,这对于从数据源导入数据或数据对象是非常理想的。但这将创建一个点对点的数据管道。在我们的案例中,我们希望在Azure数据工厂中创建一个元数据驱动的数据管道,所以我们将采用元数据驱动的复制任务,如下图所示。

image.png 在选择了元数据驱动选项后,接下来,我们需要创建一个控制表,该表将保存我们打算来源的数据库对象的元数据定义。当我们的管道被创建时,它将被参数化,从这个表中读取对象的定义,并动态地从源头获取数据和数据对象,使其成为元数据驱动的。提供我们打算创建新表的数据存储。我们可以点击新建按钮,注册我们已有的Azure SQL数据库,将其作为控制表的数据存储,如下图所示。我们打算创建一个新表,所以我们可以提供模式名称以及表的名称。提供适当的名称和计划,并浏览到下一步。

image.png

在这一步,我们需要注册数据源。下面显示的是Azure数据工厂所支持的各种数据源。

image.png

比方说,我们打算使用Azure Blob Storage作为我们的数据源,我们可能有大量的数据文件。选择相同的源类型,通过创建一个新的连接来注册Azure Blob存储的地址,然后我们就会看到详细的信息,以指定我们打算从其中获取数据对象的文件或文件夹的地址。通过点击浏览按钮选择数据文件,然后点击下一步按钮。

image.png

在这一步,假设我们在上一步选择了数据文件,这个文件的格式应该被自动检测出来,我们也应该能够预览数据。如果数据没有按预期读取,我们可以配置额外的设置,如定界符、压缩类型等。一旦我们确定数据被如期读取,我们就可以进入下一个步骤。

image.png 现在我们需要注册目标数据存储,在我们的例子中,目标数据存储是Azure SQL数据库。选择相关的目标类型,并通过创建一个新的连接来注册其地址,就像我们在上一步所做的那样。一旦完成,它将如下图所示。我们打算在Azure SQL数据库中创建一个新的表,因为每次有新类型的数据对象或数据文件登陆数据湖时,我们可能想在Azure SQL数据库中创建一个新的表。提供新表的模式和名称,该表应在Azure SQL数据库中创建,以承载正在导入的数据。完成后,导航到下一个步骤。

image.png

如果需要,我们可以选择修改列映射。现在,我们可以继续使用默认的映射,因为我们正在创建一个新的表,目标表中的列将与源表相同。

image.png

现在我们需要配置设置,为正在创建的任务提供一个名称和一些可选的描述。从高级设置中,我们还可以配置管道在数据管道执行的核心部分完成后可以执行的数据一致性检查。

image.png

在摘要部分,我们现在可以查看到目前为止我们所配置的所有细节。一旦完成,我们可以导航到下一步。

image.png

在这一步,向导会注册新的数据集、数据管道,并生成SQL脚本,在Azure SQL数据库中创建控制表,生成的脚本如下所示。

image.png 我们可以通过导航到数据管道部分来查看三个不同的任务以及从向导那里创建的参数化数据管道,如下图所示。

image.png

复制之前生成的脚本,并通过使用SQL Server Management Studio(SSMS)在Azure SQL数据库实例上执行相同的脚本。一旦执行,它将在浏览器窗格中创建一个新的控制表,如下图所示。

image.png

导航回Azure Data Factory门户,向数据管道添加一个触发器,并执行同样的操作。执行完成后,你会发现在Azure SQL数据库中创建了一个新表,该表的模式和数据与Azure Blob Storage中托管的源文件相同,如下图所示。

image.png

对于我们打算使用此管道进行源文件的任何后续数据库对象,我们只需在此控制表中添加或更新相关记录,而数据管道将从该表中读取参数并执行相应的操作。通过这种方式,我们可以使用Azure Data Factory创建元数据驱动的数据管道。

总结

在这篇文章中,我们了解了开发元数据驱动的数据管道与点对点数据管道的重要性和实用性。我们使用Azure Blob Storage作为源,Azure SQL数据库作为目标,并学会了使用Azure Data Factory开发元数据驱动的数据管道。