使用参考数据时,流分析不会向 SQL table 生成输出

Stream Analytics doesn't produce output to SQL table when reference data is used

我最近在使用 ASA,我正在尝试使用参考数据将 ASA 流直接插入 SQL table。我的开发基于这篇 MS 文章:https://msdn.microsoft.com/en-us/azure/stream-analytics/reference/reference-data-join-azure-stream-analytics.

数据流概览 - 遥测:

在将流插入 SQL table.[=108= 之前,我想使用一些参考数据来 "enrich" ASA 流和一些 IDKey ]

我已经做过的事情:

  • 已使用 ASA 查询 SELECT * INTO [sql-table] FROM Input WHERE DeviceType ='HeatPump' 将 ASA 流直接插入 SQL table,其中 [sql-table] 与 JSON 消息 + 标准列(EventProcessedUtcTime、PartitionID、EventEnqueueUtcTime)具有相同的架构

  • 使用ASA查询SELECT Column1, Column2, Column3... INTO [sql-table] FROM Input WHERE DeviceType = 'HeatPump'成功将ASA流直接插入到SQLtable - 与上面的查询基本相同,只是这次我在中使用了命名列select声明。

  • 已生成 JSON 个参考数据文件并将其放入 BLOB 存储
  • 创建了新的静态 (不使用 {date} 和 {time} 占位符) ASA 中的引用数据输入指向 BLOB 存储中的文件。
  • 然后我使用带有命名列的相同语句将参考数据加入 ASA 查询中的数据流
  • 结果 SQL table
  • 中没有输出行

调试问题时我使用了 Query ASA 中的测试功能

  • 我从事件中心采样数据 - 流数据。

  • 我从文件上传示例数据 - 参考数据。

  • 完成事件中心的数据采样后,我测试了一个查询 -> 输出产生了一些行 -> 这在查询中不是问题

  • 然而...如果我 运行 ASA,没有输出行被插入 SQL table.

我尝试的一些其他想法:

  • 使用 TRY_CAST 函数将字段从参考数据转换为适当的数据类型,然后再将它们与流数据中的字段连接起来

  • 使用 TRY_CAST 函数在 SELECT 中转换字段,然后将它们插入 SQL table

我现在真的不知道该怎么办。有什么建议么?


编辑:添加数据流JSON、参考数据JSON、ASA查询、ASA输入配置、BLOB存储配置和ASA测试输出结果

数据流JSON - 单条消息

[
 {
    "Activation": 0,
    "AvailablePowerNegative": 6.0,
    "AvailablePowerPositive": 1.91,
    "DeviceID": 99999,
    "DeviceIsAvailable": true,
    "DeviceOn": true,
    "Entity": "HeatPumpTelemetry",
    "HeatPumpMode": 3,
    "Power": 1.91,
    "PowerCompressor": 1.91,
    "PowerElHeater": 0.0,
    "Source": "<omitted>",
    "StatusToPowerOff": 1,
    "StatusToPowerOn": 9,
    "Timestamp": "2018-08-29T13:34:26.0Z",
    "TimestampDevice": "2018-08-29T13:34:09.0Z"
 }
]

参考数据JSON - 单条消息

[
 {
    "SourceID": 1,
    "Source": "<ommited>",
    "DeviceID": 10,
    "DeviceSourceCode": 99999,
    "DeviceName": "NULL",
    "DeviceType": "Heat Pump",
    "DeviceTypeID": 1
 }
]

ASA 查询

WITH HeatPumpTelemetry AS
(
    SELECT 
        *
    FROM 
        [input-eh]
    WHERE 
        source='<omitted>'
        AND entity = 'HeatPumpTelemetry'
)
SELECT 
    e.Activation,
    e.AvailablePowerNegative,
    e.AvailablePowerPositive,
    e.DeviceID,
    e.DeviceIsAvailable,
    e.DeviceOn,
    e.Entity,
    e.HeatPumpMode,
    e.Power,
    e.PowerCompressor,
    e.PowerElHeater,
    e.Source,
    e.StatusToPowerOff,
    e.StatusToPowerOn,
    e.Timestamp,
    e.TimestampDevice,
    e.EventProcessedUtcTime,
    e.PartitionId,
    e.EventEnqueuedUtcTime
INTO
    [out-SQL-HeatPumpTelemetry]
FROM
    HeatPumpTelemetry e
    LEFT JOIN [input-json-devices] d ON
        TRY_CAST(d.DeviceSourceCode as BIGINT) = TRY_CAST(e.DeviceID AS BIGINT)

ASA 参考数据输入配置 Reference Data input configuration in Stream Analytics

BLOB存储目录树 Blob storage directory tree

ASA 测试查询输出 ASA test query output

matejp。我没有复现你的问题,你可以参考我的步骤。

blob 存储中的参考数据:

{
    "a":"aaa",
    "reference":"www.bing.com"
}

blob 存储中的流数据

[
    {
        "id":"1",
        "name":"DeIdentified 1",
        "DeviceType":"aaa"      
    },
    {
        "id":"2",
        "name":"DeIdentified 2",
        "DeviceType":"No"     
    }
]

查询语句:

SELECT
    inputSteam.*,inputRefer.*
into sqloutput
FROM
    inputSteam
Join inputRefer on inputSteam.DeviceType = inputRefer.a

输出:

希望对你有帮助you.Any关注,告诉我。

我想我发现了错误。在过去的几天里,我测试了在 Azure 流分析中配置输入时几乎所有可能的组合。

我以这个例子作为基准开始:https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-build-an-iot-solution-using-stream-analytics

  • 我已经在不做任何更改的情况下尝试了该解决方案,以确保带有参考数据输入的示例有效 -> 它有效
  • 然后我将 ASA 输出从 CosmosDB 更改为 SQL table 没有任何更改 -> 它起作用了
  • 然后我将我的初始 ASA 作业更改为与示例中的 ASA 作业一样多的 "same"(写入 SQL table)-> 它起作用了
  • 然后我开始使用 BLOB 目录名称 -> 在这里我发现了错误。

我认为我遇到的问题是由于在文件夹名称中使用了字符“-”。

在我的例子中,我创建了名为 "reference-data" 的文件夹并上传了名为 "devices.json" 的文件(文件夹结构“/reference-data/devices.json”)-> ASA 输出到SQL table 无效 一旦我将文件夹名称更改为 "refdata"(文件夹结构“/referencedata/devices.json”)-> ASA 输出到 SQL table 就可以了。

尝试了 3 次从包含“-”和不包含它的文件夹名称更改参考数据输入 => 每次 ASA 输出到 SQL 当文件夹名称中包含“-”时,服务器停止工作。

回顾一下:

  • 我建议不要在 BLOB 文件夹名称中使用“-”作为 ASA 作业中的静态参考数据输入。