【问题标题】:Azure Data factory, How to incrementally copy blob data to sqlAzure 数据工厂,如何将 blob 数据增量复制到 sql
【发布时间】:2019-01-23 02:31:55
【问题描述】:

我有一个 azure blob 容器,其中每 6 小时放置一些带有数据的 json 文件,我想使用 Azure 数据工厂将其复制到 Azure SQL DB。文件的文件模式如下:“customer_year_month_day_hour_min_sec.json.data.json”

blob 容器也有其他 json 数据文件,所以我对数据集中的文件进行了过滤。

第一个问题是如何将 blob 数据集上的文件路径设置为仅查找我想要的 json 文件?我尝试使用通配符 *.data.json 但这不起作用。我可以使用的唯一文件名通配符是 *.json

第二个问题是如何仅将位于 blob 存储中的新文件(具有特定文件模式)中的数据复制到 Azure SQL?我无法控制将数据放入 blob 容器的过程,也无法将文件移动到另一个位置,这使得操作更加困难。

请帮忙。

【问题讨论】:

    标签: azure-data-factory azure-data-factory-2


    【解决方案1】:

    您可以使用ADF event trigger 来实现此目的。

    将您的事件触发器定义为“blob created”,并根据您的文件名模式指定 blobPathBeginsWithblobPathEndsWith 属性。

    对于第一个问题,当针对特定 blob 触发事件触发器时,该事件会将 blob 的文件夹路径和文件名捕获到属性 @triggerBody().folderPath @triggerBody().fileName。您需要将属性映射到管道参数,并将 @pipeline.parameters.parameterName 表达式传递给复制活动中的文件名。

    这也回答了第二个问题,每次触发触发器时,您都会在 @triggerBody().folderPath@triggerBody() 中获得最新创建的文件的文件名.文件名。 谢谢。

    【讨论】:

      【解决方案2】:

      我了解你的情况。似乎他们使用了一个新平台来重现几十年前的问题。 :)

      我首先设置的模式类似于:

      1. 创建将在源容器中的每个新文件上触发的存储帐户触发器。
      2. 在触发的管道中,检查博客名称是否符合您的参数。如果没有,就结束,不采取任何行动。如果是这样,请将 blob 二进制复制到您的应用拥有的帐户/容器中,保留原件。
      3. 在运行导入管道的容器上创建另一个触发器。
      4. 运行您的导入过程。

      您的管理层必须了解的几个警告。你可以非常非常可靠,但不能保证合规,因为你和源容器之间没有交易/合同。此外,可能存在序列间隙,因为通常可以在处理较大文件的同时处理小文件。

      如果由于某种原因您确实错过了某个文件,您只需将其复制到您的容器中,您的进程将在该容器中提取它。您可以以相同的方式加载所有以前的 blob。

      【讨论】:

      • “他们使用了一个新平台来重现一个几十年前的问题”我喜欢它——它似乎在 Azure 中发生了很多。我只需要扔掉我可靠、安全、经过充分验证的服务帐户架构,回到 SQL 帐户。
      猜你喜欢
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2016-10-02
      • 2015-07-24
      • 1970-01-01
      • 2021-07-03
      • 2019-10-09
      • 2019-04-20
      相关资源
      最近更新 更多