Azure 数据工厂 - 物联网管道的优化设计

Azure Data Factory - optimal design for an IOT pipeline

我正在开发 Azure 数据工厂解决方案来解决以下情况:

  1. CSV 格式的数据文件被转储到 Data Lake Gen 2 路径中。有两种文件,我们称它们为 TypeATypeB,每个文件都被转储到反映一组传感器和日期的路径中。

例如:

/mycontainer/csv/Group1-20210729-1130/TypeA.csv
/mycontainer/csv/Group1-20210729-1130/TypeB.csv
/mycontainer/csv/Group1-20210729-1138/TypeA.csv
/mycontainer/csv/Group1-20210729-1138/TypeB.csv
  1. 我需要从 TypeA 文件中以 Delta 格式将数据提取到 Data Lake Gen 2 存储上的不同位置。我需要对 TypeB 个文件进行类似的处理,但它们的格式不同。

我已经成功地组合了一个“数据流”,给定一个特定的 blob 路径,它完成了第 2 步。但是我正在努力组合一个管道,将它应用于每个进来的文件。

我的第一个想法是基于存储事件触发器来执行此操作,因此每次出现 CSV 文件时,管道都会 运行 处理该文件。我 几乎 能够使用 fileNamefolderPath 参数和通配符的组合来完成此操作。我什至有一个在手动触发时会工作的管道(这意味着我手动输入了特定的 fileNamefolderPath 值)。但是我有两个问题让我怀疑这是否是正确的方法:

a) 当由实际存储事件触发时,我无法让它工作,我怀疑是因为我的参数和通配符组合最终在它生成的路径中两次包含容器名称。很难检查这一点,因为您收到的错误消息不会告诉您各种值实际解析为 (!)。

b) 将 CSV 提取到 parquet Delta 并将结果放入 Data Lake 所需的集群需要几分钟才能启动 - 如果在文件级别工作则不太好。 (我意识到我可以通过在集群上设置 TTL 来稍微缓解这种情况 - 需要付出一定的代价。)

所以我放弃了这种方法,并尝试设置一个定期触发的管道,并将提取所有匹配特定模式(例如 /mycontainer/csv/*/TypeA.csv)的 CSV 文件,将它们作为批处理,然后删除它们。在这一点上,我非常惊讶地发现“定界文本”数据集似乎不支持通配符,而这正是我以一种简单的方式实现这一目标所依赖的。

所以我的问题是:

非常感谢任何指点。

我相信你的方向是正确的。

上周,如果通配符在 CSV 名称中,我能够导入通配符 CSV。也许创建一个中间步骤将所有类型 A 放在同一个文件夹中?

关于 ADF - 这是一项很酷的技术,如果您希望在没有太多编码的情况下获取数据,则学习曲线陡峭(并且有很多更新 - 有时包括重大更改)。一些缺点:

  • 监控——如果你想让它更便宜,有很多黑客攻击(例如通过逻辑应用程序发送邮件)
  • 调试 - 如您所见,调试消息通常含糊不清或不够充分
  • 多次每月更新让它感觉像是一个测试版。确实,经常有一些简单的任务很难完成。

祝你好运;)