Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Azure Streaming Analytics仅向一个Azure SQL DB表发送数据?_Sql_Sql Server_Azure_Azure Stream Analytics - Fatal编程技术网

如何从Azure Streaming Analytics仅向一个Azure SQL DB表发送数据?

如何从Azure Streaming Analytics仅向一个Azure SQL DB表发送数据?,sql,sql-server,azure,azure-stream-analytics,Sql,Sql Server,Azure,Azure Stream Analytics,背景 我根据和的教程,使用Azure事件中心和Azure流分析(ASA)建立了一个物联网项目。JSON格式的消息使用Webhook从支持wifi的设备发送到事件中心,然后通过ASA查询发送,并根据它们来自的输入流存储在三个Azure SQL数据库之一 该设备(粒子光子)使用不同的有效载荷传输3条不同的消息,其中定义了3个SQL表用于长期存储/分析。下一步包括实时警报和通过Power BI进行可视化 以下是该想法的视觉表现: ASA查询 SELECT ParticleId, Ti

背景

我根据和的教程,使用Azure事件中心和Azure流分析(ASA)建立了一个物联网项目。JSON格式的消息使用Webhook从支持wifi的设备发送到事件中心,然后通过ASA查询发送,并根据它们来自的输入流存储在三个Azure SQL数据库之一

该设备(粒子光子)使用不同的有效载荷传输3条不同的消息,其中定义了3个SQL表用于长期存储/分析。下一步包括实时警报和通过Power BI进行可视化

以下是该想法的视觉表现:

ASA查询

SELECT
    ParticleId,
    TimePublished,
    PH,
    -- and other fields
INTO TpEnvStateOutputToSQL
FROM TpEnvStateInput


SELECT
    ParticleId,
    TimePublished,
    EventCode,
    -- and other fields
INTO TpEventsOutputToSQL
FROM TpEventsInput


SELECT
    ParticleId,
    TimePublished,
    FreshWater,
    -- and other fields
INTO TpConsLevelOutputToSQL
FROM TpConsLevelInput
问题:对于收到的每条消息,数据都会被推送到数据库中的所有三个表中,而不仅仅是查询中指定的输出。数据所属的表按预期填充新行,而其他两个表则为不存在数据的列填充空值

根据我的理解,INTO关键字会将输出定向到指定的接收器。但情况似乎并非如此,因为所有三个输入的输出都被推送到所有接收器(所有3个SQL表)

我为粒子光子编写的测试脚本将发送每种类型的消息,其中包含硬编码字段,顺序为:EnvState、Event、ConsLevels,间隔15秒,重复一次

以下是发送到所有表的输出示例,显示了每个表中的一列:

它是使用此查询生成的(在Visual Studio中):

对于TpEnvStateInput类型的输入事件,其中键“PH”将存在(而不是键“EventCode”或“淡水”,它们分别属于TpEventInput和TpConsLevelInput),只需要在环境状态表中输入一个条目

问题: ASA查询中是否存在缺陷,或者我对如何使用/设置ASA存在误解


我希望我不必定义三个单独的流分析容器,因为它们往往相当昂贵。在运行完并让4个ASA容器运行一天之后,我在Azure中使用了将近5美元的积分。预计成本为150美元/月,我无法证明坚持使用Azure是合理的。

ASA应该用于复杂事件处理。在查询中使用ASA基本上是将数据从事件中心传递到表。如果你真的拥有一个简单的“workerweb应用程序”来处理传入的事件,这会便宜得多

本博客文章介绍了以下最佳实践:


如果您正在对输入数据进行实时转换、过滤和灯光分析,ASA是非常棒的。此外,如果您有一些作为函数公开的Azure机器学习模型(当前处于预览中),它也非常有用。

在您的示例中,所有三个“select into”语句都从相同的输入源读取,并且没有任何筛选子句,因此所有行都将被选中

如果只想为每个输出选择特定行,则必须指定筛选条件。例如,假设输出“tpenvstateouttosql”只需要列“PH”中具有非null值的记录,那么ASA查询如下所示

SELECT
    ParticleId,
    TimePublished,
    PH
    -- and other fields INTO TpEnvStateOutputToSQL FROM TpEnvStateInput WHERE PH IS NOT NULL
SELECT
    ParticleId,
    TimePublished,
    PH
    -- and other fields INTO TpEnvStateOutputToSQL FROM TpEnvStateInput WHERE PH IS NOT NULL