Compartilhar via

使用数据流将文件写入数据湖的最佳做法

适用于: Azure 数据工厂 Azure Synapse Analytics

如果你不熟悉Azure 数据工厂,请参阅 引入到 Azure 数据工厂

在本教程中,你将了解将文件写入 ADLS Gen2 或使用数据流Azure Blob 存储时可以应用的最佳做法。 需要访问 Azure Blob 存储 帐户或 Azure Data Lake Store Gen2 帐户才能读取 parquet 文件,然后将结果存储在文件夹中。

先决条件

  • Azure 订阅。 如果没有Azure订阅,请在开始前创建一个 trial Azure 帐户
  • Azure存储帐户。 将 ADLS 存储用作“源”和“接收器”数据存储。 如果没有存储帐户,请参阅 创建Azure存储帐户,了解创建存储帐户的步骤。

在本教程中,假设您已

创建数据工厂

在此步骤中,请先创建数据工厂,然后打开数据工厂 UX,在该数据工厂中创建一个管道。

  1. 打开 Microsoft EdgeGoogle Chrome。 目前,数据工厂 UI 仅在 Microsoft Edge 和 Google Chrome Web 浏览器中受支持。

  2. 在左侧菜单中,选择“创建资源”>“集成”>“数据工厂”

  3. 在“新建数据工厂”页面上,在“名称”下输入“ADFTutorialDataFactory”。

  4. 选择要创建数据工厂的 Azure subscription

  5. 对于“资源组”,请执行以下步骤之一:

    a。 选择“使用现有资源组”,并从下拉列表选择现有的资源组。

    b. 选择“新建”,并输入资源组的名称。 若要了解资源组,请参阅 使用资源组来管理Azure资源

  6. 在“位置”下选择数据工厂所在的位置。 下拉列表中仅显示支持的位置。 数据存储(例如,Azure 存储和 SQL 数据库)和数据工厂使用的计算(例如,Azure HDInsight)可以位于其他区域。

  7. 选择“创建”。

  8. 创建完成后,通知中心内会显示通知。 选择转到资源,以导航到“数据工厂”页面。

  9. 选择Author & Monitor以在单独的选项卡中启动数据工厂 UI。

创建包含数据流活动的管道

在此步骤中,你将创建一个包含数据流活动的管道。

  1. 在Azure 数据工厂主页上,选择Orchestrate

    屏幕截图显示数据工厂主页,其中突出显示了“编排”按钮。

  2. 在管道的“常规”选项卡中,输入“DeltaLake”作为管道的名称

  3. 在工厂顶部栏中,将数据流调试滑块打开。 调试模式允许针对实时 Spark 群集进行转换逻辑的交互式测试。 数据流群集需要 5-7 分钟才能预热,建议用户在计划进行数据流开发时先启用调试。 有关详细信息,请参阅调试模式

    数据流 Activity

  4. 活动窗格中,展开移动和转换折叠面板。 将数据流活动从窗格拖放到管道画布。

    截图显示管道画布,您可以在此放置数据流活动。

在数据流画布中构建转换逻辑

你将获取任何源数据(在本教程中,我们将使用 Parquet 文件源),并使用汇聚转换,以最有效机制将数据存储为 Parquet 格式,从而实现数据湖 ETL。

最终流程

教程目标

  1. 在新的数据流 1 中选择任意源数据集。使用数据流有效地划分您的汇(sink)数据集。
  2. 在 ADLS Gen2 数据湖文件夹中登录分区数据

从一个空白的数据流画布开始

首先,让我们为下述每个机制设置数据流环境,以便在 ADLS Gen2 中登录数据

  1. 单击源转换。
  2. 单击底部面板中数据集旁的新建按钮。
  3. 选择数据集或创建新数据集。 对于本演示,我们将使用名为 User Data 的 Parquet 数据集。
  4. 添加一个派生列转换。 我们会将此用作动态设置所需文件夹名称的方式。
  5. 添加汇聚转换。

分层文件夹输出

使用数据中的唯一值创建文件夹层次结构以对数据湖中的数据进行分区,这种做法十分常见。 这是在数据湖和 Spark(数据流背后的计算引擎)中组织和处理数据的最佳方式。 但是,以这种方式组织输出会产生较小的性能成本。 在接收器中使用此机制时,预计总体管道性能会轻微下降。

  1. 返回到数据流设计器并编辑上面创建的数据流。 单击接收器转换。
  2. 单击“优化”>设置分区>键
  3. 选取要用于设置分层文件夹结构的列。
  4. 请注意,下面的示例使用年份和月份作为用于文件夹命名的列。 结果是得到形式为 releaseyear=1990/month=8 的文件夹。
  5. 访问数据流源中的数据分区时,只需指向 releaseyear 上面的顶层文件夹,并对每个后续文件夹使用通配符模式,例如:**/**/*.parquet
  6. 若要操作数据值,或者即使需要为文件夹名称生成合成值,请使用派生列转换创建要在文件夹名称中使用的值。

键分区

将文件夹命名为数据值

对于使用 ADLS Gen2 的数据湖数据,一种性能稍好的汇聚技术是 Name folder as column data,尽管它没有提供与键/值分区相同的好处。 虽然层次结构的关键分区样式使你能够更轻松地处理数据切片,但这种技术使用的是一种平展的文件夹结构,可以更快地写入数据。

  1. 返回到数据流设计器并编辑上面创建的数据流。 单击汇聚转换。
  2. 单击“优化”>“设置分区”>“使用当前分区”。
  3. 单击“设置”>“将文件夹命名为列数据”。
  4. 选择要用于生成文件夹名称的列。
  5. 若要操作数据值,或者即使需要为文件夹名称生成合成值,请使用派生列转换创建要在文件夹名称中使用的值。

文件夹选项

将文件命名为数据值

上面教程中所列的方法是在数据湖中创建文件夹类别的良好用例。 这些方法采用的默认文件命名方案是使用 Spark 执行程序作业 ID。 有时您可能希望在数据流文本汇中设置输出文件的名称。 此方法仅建议用于小文件。 将分区文件合并到单个输出文件中的过程是一个长时间运行的过程。

  1. 返回到数据流设计器并编辑上面创建的数据流。 单击汇聚转换。
  2. 单击“优化”>“设置分区”>“单个分区”。 正是这一单个分区要求在合并文件时造成了执行过程中的瓶颈。 此选项仅建议用于小文件。
  3. 单击“设置”>“将文件命名为列数据”。
  4. 选择要用于生成文件名的列。
  5. 若要操作数据值,或者即使需要为文件名生成合成值,请使用派生列转换创建要在文件名中使用的值。

了解有关数据流接收器的详细信息。