【问题标题】:Append data to existing file in Azure Data Lake storage from REST API从 REST API 将数据附加到 Azure Data Lake 存储中的现有文件
【发布时间】:2020-04-13 22:15:21
【问题描述】:
我已经设置了从 REST API 获取数据并将其放入 ADLS 存储 gen1 的管道,我还看到了生成的文件
REST API > ADF 管道(获取不记名令牌 + 复制活动)> ADLS
但是当新数据来自该 API 时,数据会替换该文件中的当前内容,而不是每次都附加到最后一行
我需要提供什么动态操作吗?有人可以把我引向正确的方向吗?
注意:我可以看到文件里面的内容,完全没有错误
【问题讨论】:
标签:
rest
azure-data-factory
azure-data-lake
【解决方案1】:
鉴于 Blob 存储的性质,我认为这对于标准的 Copy 活动是不可能的。 Azure Blob 有多种类型,其中最常见的是 BlockBlob,几乎可以肯定是 ADF 操作生成的类型。 BlockBlob 不能更改或更新,只能覆盖,这解释了您遇到的行为。为了更新 blob 的内容,必须将其定义为 AppendBlob,它允许添加新内容。 AppendBlob 类型必须在创建 Blob 时声明。
我知道完成此任务的唯一方法(创建 AppendBlob 和向其附加内容)是通过 Azure 存储 SDK,其中包括特定于处理 AppendBlob 的类和方法。此操作需要一些自定义代码(我假设是 C# 控制台应用程序)来访问存储帐户并附加到 Blob。为了将其合并到您的管道中,您需要将您的复制活动替换为自定义活动,这将在 Azure Batch 帐户中执行您的 C# 代码。
要考虑的替代方法是允许 Copy 活动每次生成一个新 Blob,而不是尝试使用单个 Blob。通常,数据湖和 MPP 旨在一次处理多个文件,因此根据您的用例,这可能是更合理的方法。