首页 > 解决方案 > 从 REST API 将数据附加到 Azure Data Lake 存储中的现有文件

问题描述

我已经设置了从 REST API 获取数据并将其放入 ADLS 存储 gen1 的管道,我还看到了生成的文件

REST API > ADF 管道(获取不记名令牌 + 复制活动)> ADLS

但是当新数据来自该 API 时,数据会替换该文件中的当前内容,而不是每次都附加到最后一行

我需要提供什么动态操作吗?有人能把我引向正确的方向吗?

注意:我可以看到文件里面的内容,完全没有错误

标签: restazure-data-factoryazure-data-lake

解决方案


鉴于 Blob 存储的性质,我认为这对于标准的 Copy 活动是不可能的。Azure Blob 有多种类型,其中最常见的是 BlockBlob,几乎可以肯定是 ADF 操作生成的类型。BlockBlob 不能更改或更新,只能被覆盖,这解释了您遇到的行为。为了更新 blob 的内容,必须将其定义为 AppendBlob,它允许添加新内容。AppendBlob 类型必须在创建 Blob 时声明。

我知道完成此操作的唯一方法(创建 AppendBlob 和向其附加内容)是通过 Azure Storage SDK,其中包括特定于处理 AppendBlob 的类和方法。此操作需要一些自定义代码(我假设是 C# 控制台应用程序)来访问存储帐户并附加到 Blob。为了将此合并到您的管道中,您需要将您的复制活动替换为自定义活动,这将在 Azure Batch 帐户中执行您的 C# 代码。

可以考虑的替代方法是允许 Copy 活动每次都生成一个新的 Blob,而不是尝试使用单个 Blob。通常,数据湖和 MPP 旨在一次处理多个文件,因此根据您的用例,这可能是一种更合理的方法。


推荐阅读