Azure 流分析查询 - 进行合并

Posted

技术标签:

【中文标题】Azure 流分析查询 - 进行合并【英文标题】:Azure Stream Analytics Query - Doing a Merge 【发布时间】:2019-03-22 08:31:03 【问题描述】:

美好的一天

我有一个应用程序,它通过 Azure EventHub 通过 Azure SQL 数据库中的 Azure 流分析传递数据。此数据来自每隔几分钟从 Cost Recovery Software 写入的文件,其中包含最新的完整帐户列表。

我想确保当文件中的所有数据都通过此过程时,会发生某种形式的 MERGE,仅更新现有帐户并插入不存在的帐户。确保不会创建重复帐户。

我不确定流分析是否是将数据从 EventHub 馈送到 SQL 的最佳选择。

流程示例:

【问题讨论】:

更新:我已经阅读了更多内容,数据工厂似乎是进行 UPSERT 的好方法 但是这不像流分析那样实时 您可能希望使用 Azure 函数来执行 Upsert 【参考方案1】:

使用 Azure 流分析和 SQL Azure DB,可以通过以下方式完成:

    将 ASA 数据输出到 SQL 到第一个表,它将是一个“登陆表” Create a trigger 在 SQL 中执行从登陆表到最终表的合并。

或者,如果您使用 Cosmos DB 作为输出,Azure 流分析本机支持 upsert,因此可以直接从 ASA 完成。

如果您有任何其他问题和反馈,请告诉我们。

谢谢,

JS

【讨论】:

【参考方案2】:

根据您的描述,您仍然可以使用 Azure 数据工厂来实现您的实时要求。

1.创建Event Hub Trigger Azure Function。请看C# example。

2.在 Azure 数据工厂中创建管道。

3.在该管道中,创建 Azure Function Activity 以配置您的事件中心触发函数 url 和参数。

4.在Azure Function Activity之后创建Copy Activity,将源作为Azure Function Activity输出的数据。

5.将 sink 设为 SQL 数据库并创建存储过程进行 upsert 合并业务。请关注blog 中的详细信息。

【讨论】:

那么 UPSERT 还是发生在 Azure SQL 中? @LordRofticus 是的,有什么担心吗? 我可能没有抓住重点,但当 Upsert SP 执行我想做的事情时,似乎需要很多 Azure 组件(并且它们只传输数据)。这意味着我也可以直接调用 SP,将记录值作为参数发送给它,让它检查是否存在这样的记录,然后决定 INSERT/UPDATE。 @LordRofticus 是的,但是您仍然需要 Azure Tirgger Function 和 ADF 来实现自动作业,对吗?

以上是关于Azure 流分析查询 - 进行合并的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure 流分析查询中重用子查询的结果

Azure 流分析 - 沿流查询

Azure 流分析查询以检测特定 deviceId 的丢失活动事件

在 Azure 流分析查询中同时使用数组和记录类型

Azure 流分析时间窗口查询

Azure 流分析:如何使用两个 Azure 机器学习函数