Azure 数据工厂 - 物联网管道的优化设计
Azure Data Factory - optimal design for an IOT pipeline
我正在开发 Azure 数据工厂解决方案来解决以下情况:
- CSV 格式的数据文件被转储到 Data Lake Gen 2 路径中。有两种文件,我们称它们为
TypeA
和 TypeB
,每个文件都被转储到反映一组传感器和日期的路径中。
例如:
/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
- 我需要从
TypeA
文件中以 Delta 格式将数据提取到 Data Lake Gen 2 存储上的不同位置。我需要对 TypeB
个文件进行类似的处理,但它们的格式不同。
我已经成功地组合了一个“数据流”,给定一个特定的 blob 路径,它完成了第 2 步。但是我正在努力组合一个管道,将它应用于每个进来的文件。
我的第一个想法是基于存储事件触发器来执行此操作,因此每次出现 CSV 文件时,管道都会 运行 处理该文件。我 几乎 能够使用 fileName
和 folderPath
参数和通配符的组合来完成此操作。我什至有一个在手动触发时会工作的管道(这意味着我手动输入了特定的 fileName
和 folderPath
值)。但是我有两个问题让我怀疑这是否是正确的方法:
a) 当由实际存储事件触发时,我无法让它工作,我怀疑是因为我的参数和通配符组合最终在它生成的路径中两次包含容器名称。很难检查这一点,因为您收到的错误消息不会告诉您各种值实际解析为 (!)。
b) 将 CSV 提取到 parquet Delta 并将结果放入 Data Lake 所需的集群需要几分钟才能启动 - 如果在文件级别工作则不太好。 (我意识到我可以通过在集群上设置 TTL 来稍微缓解这种情况 - 需要付出一定的代价。)
所以我放弃了这种方法,并尝试设置一个定期触发的管道,并将提取所有匹配特定模式(例如 /mycontainer/csv/*/TypeA.csv
)的 CSV 文件,将它们作为批处理,然后删除它们。在这一点上,我非常惊讶地发现“定界文本”数据集似乎不支持通配符,而这正是我以一种简单的方式实现这一目标所依赖的。
所以我的问题是:
- 我的 'batch of files' 方法是否大致正确?有没有一种方法可以定义从多个 blob 读取数据的分隔文本数据源?
- 或者我是否需要更 'iterative' 的方法,可能使用 'Foreach' 步骤?我真的真的希望情况并非如此,因为 2021 年采用的模式似乎很奇怪。
- 一个更广泛的问题:ADF 是适合这种情况的工具吗?一开始我对使用它感到很兴奋,但越来越觉得它像是 'exciting to demo but hard to actually use' 经常在 low/no 代码 space 中弹出的东西之一。是否有适合 Azure 存储的流行替代品?
非常感谢任何指点。
我相信你的方向是正确的。
上周,如果通配符在 CSV 名称中,我能够导入通配符 CSV。也许创建一个中间步骤将所有类型 A 放在同一个文件夹中?
关于 ADF - 这是一项很酷的技术,如果您希望在没有太多编码的情况下获取数据,则学习曲线陡峭(并且有很多更新 - 有时包括重大更改)。一些缺点:
- 监控——如果你想让它更便宜,有很多黑客攻击(例如通过逻辑应用程序发送邮件)
- 调试 - 如您所见,调试消息通常含糊不清或不够充分
- 多次每月更新让它感觉像是一个测试版。确实,经常有一些简单的任务很难完成。
祝你好运;)
我正在开发 Azure 数据工厂解决方案来解决以下情况:
- CSV 格式的数据文件被转储到 Data Lake Gen 2 路径中。有两种文件,我们称它们为
TypeA
和TypeB
,每个文件都被转储到反映一组传感器和日期的路径中。
例如:
/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
- 我需要从
TypeA
文件中以 Delta 格式将数据提取到 Data Lake Gen 2 存储上的不同位置。我需要对TypeB
个文件进行类似的处理,但它们的格式不同。
我已经成功地组合了一个“数据流”,给定一个特定的 blob 路径,它完成了第 2 步。但是我正在努力组合一个管道,将它应用于每个进来的文件。
我的第一个想法是基于存储事件触发器来执行此操作,因此每次出现 CSV 文件时,管道都会 运行 处理该文件。我 几乎 能够使用 fileName
和 folderPath
参数和通配符的组合来完成此操作。我什至有一个在手动触发时会工作的管道(这意味着我手动输入了特定的 fileName
和 folderPath
值)。但是我有两个问题让我怀疑这是否是正确的方法:
a) 当由实际存储事件触发时,我无法让它工作,我怀疑是因为我的参数和通配符组合最终在它生成的路径中两次包含容器名称。很难检查这一点,因为您收到的错误消息不会告诉您各种值实际解析为 (!)。
b) 将 CSV 提取到 parquet Delta 并将结果放入 Data Lake 所需的集群需要几分钟才能启动 - 如果在文件级别工作则不太好。 (我意识到我可以通过在集群上设置 TTL 来稍微缓解这种情况 - 需要付出一定的代价。)
所以我放弃了这种方法,并尝试设置一个定期触发的管道,并将提取所有匹配特定模式(例如 /mycontainer/csv/*/TypeA.csv
)的 CSV 文件,将它们作为批处理,然后删除它们。在这一点上,我非常惊讶地发现“定界文本”数据集似乎不支持通配符,而这正是我以一种简单的方式实现这一目标所依赖的。
所以我的问题是:
- 我的 'batch of files' 方法是否大致正确?有没有一种方法可以定义从多个 blob 读取数据的分隔文本数据源?
- 或者我是否需要更 'iterative' 的方法,可能使用 'Foreach' 步骤?我真的真的希望情况并非如此,因为 2021 年采用的模式似乎很奇怪。
- 一个更广泛的问题:ADF 是适合这种情况的工具吗?一开始我对使用它感到很兴奋,但越来越觉得它像是 'exciting to demo but hard to actually use' 经常在 low/no 代码 space 中弹出的东西之一。是否有适合 Azure 存储的流行替代品?
非常感谢任何指点。
我相信你的方向是正确的。
上周,如果通配符在 CSV 名称中,我能够导入通配符 CSV。也许创建一个中间步骤将所有类型 A 放在同一个文件夹中?
关于 ADF - 这是一项很酷的技术,如果您希望在没有太多编码的情况下获取数据,则学习曲线陡峭(并且有很多更新 - 有时包括重大更改)。一些缺点:
- 监控——如果你想让它更便宜,有很多黑客攻击(例如通过逻辑应用程序发送邮件)
- 调试 - 如您所见,调试消息通常含糊不清或不够充分
- 多次每月更新让它感觉像是一个测试版。确实,经常有一些简单的任务很难完成。
祝你好运;)