首页 > 解决方案 > 触发将数据从 blob 复制到 ADLS,从文件名中提取路径

问题描述

我正在尝试将我们的数据集中到 ADLSgen2 数据湖。我们的一个数据集被“转储”在 blob 存储中,我想要一个触发副本。

存储在 Blob 存储中的文件具有 JSON 格式的文件名(可以是任意日期)形式的数据。我想要的是新文件(二进制)复制到数据湖上的文件夹,路径使用文件名中存在的日期片段。

2020-01-01.jsonraw/blob/2020/01/raw_reports_blob_2020-01-01.json

首先,我在 Azure Synapse 中尝试了数据复制作业和管道,但我不确定如何使用源文件名中的详细信息设置接收器路径。似乎新的 blob 文件无法触发复制数据工具。管道方法看起来非常强大,我想这是可能的。我想要的在 Linux 上并不难,所以我想它在 Azure 中也一定是可能的。

其次,我尝试创建一个 Azure 函数,因为我对 Python 非常熟悉,但是在这里我遇到了类似的问题,因为我需要定义输入/输出绑定。输出绑定是在设计时定义的,并没有给我基于源文件名的路径类型的自由。此外,对于一个简单的二进制复制操作来说,感觉有些矫枉过正。我可以使用 blob 中的新文件触发该功能,并且读取它们没有问题。

我对 Azure 比较陌生,任何对解决方案的帮助都非常受欢迎。

标签: azureazure-functionsazure-pipelinesazure-synapseazure-data-lake-gen2

解决方案


另请参阅此答案:https ://stackoverflow.com/a/66393471/496289


ADLS 中每个 sē 都有“复制”的概念。您从源读取/下载并写入/上传到目标。

正如有人提到的数据工厂可以做到这一点。

您还可以使用:

  • azcopy来自 Power Shell Azure 函数。azcopy cp "https://[srcaccount].blob.core.windows.net/[container]/[path/to/blob]?[SAS]" "https://[destaccount].blob.core.windows.net/[container]/[path/to/blob]?[SAS]"
  • Python/Java/... Azure 函数。您必须下载文件(如果文件很大,则分块)并上传(如果大,则分块)。
  • 数据块。这与使用 Azure Synapse Analytics 在存储帐户之间复制数据类似的滥用工具。
  • Azure 逻辑应用。看到这个这个。从未使用过它们,但我相信它们的代码比 Azure Function 少,并且具有一些编程功能,如果它可以帮助您以编程方式创建目标路径。

要记住的事情:

  • 数据工厂,可能很昂贵。特别是与消费计划上的 Azure Functions 相比。
  • 消费计划中的 Azure Functions 在超时前最多有 10 分钟。因此,如果您有 GB/TB 中的文件,则无法使用它。
  • 如果适用,您将支付出口费用。

推荐阅读