使用参考数据时,Stream Analytics不会向SQL表生成输出

问题描述 投票:1回答:2

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

数据流概述 - 遥测:

  • 我有很多不同类型的设备(热泵,电池,水泵,AirCon ......)。这些设备中的每一个都具有用于其遥测数据的不同JSON模式。我可以通过消息中的属性区分JSON(例如:“DeviceType”:“HeatPump”或“DeviceType”:“AirCon”......)
  • 所有这些设备都将其遥测发送到单个事件中心
  • 在Event Hub后面,有一个Stream Analytics组件,我根据属性Device Type将流重定向到不同的输出。例如,我使用查询SELECT * INTO output-sql-table FROM input-event-hub WHERE DeviceType = 'HeatPump'从HeatPump重定向遥测

在将流插入SQL表之前,我想使用一些参考数据来“丰富”ASA流与一些IDKeys。

我已经做了什么:

  • 使用ASA查询SELECT * INTO [sql-table] FROM Input WHERE DeviceType ='HeatPump'成功将ASA流直接插入到SQL表中,其中[sql-table]具有与JSON消息+标准列相同的模式(EventProcessedUtcTime,PartitionID,EventEnqueueUtcTime)
  • 使用ASA查询SELECT Column1, Column2, Column3... INTO [sql-table] FROM Input WHERE DeviceType = 'HeatPump'成功将ASA流直接插入到SQL表中 - 基本上与上面的查询相同,只是这次我在select语句中使用了命名列。
  • 生成参考数据的JSON文件并将其放入BLOB存储
  • 在ASA中创建新的静态(不使用{date}和{time}占位符)引用数据,指向BLOB存储中的文件。
  • 然后,我使用与命名列相同的语句将参考数据加入ASA查询中的数据流
  • 结果SQL表中没有输出行

在调试问题时,我在Query ASA中使用了Test功能

  • 我从事件中心采样数据 - 流数据。
  • 我从文件上传样本数据 - 参考数据。
  • 从事件中心采样数据完成后,我测试了一个查询 - >输出产生了一些行 - >它在查询中不是问题
  • 然而......如果我运行ASA,则不会在SQL表中插入输出行。

我试过的其他一些想法:

  • 在使用流数据中的字段加入字段之前,使用TRY_CAST函数将字段从引用数据转换为适当的数据类型
  • 使用TRY_CAST函数在我将它们插入SQL表之前在SELECT中强制转换字段

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


编辑:添加数据流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

sql azure azure-sql-database azure-stream-analytics
2个回答
0
投票

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

输出:

enter image description here

希望它可以帮助你。任何关心,让我知道。


0
投票

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

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

  • 我已经尝试了没有任何更改的解决方案,以确保参考数据输入的示例工作 - >它工作
  • 然后我将CosmosDB的ASA输出更改为SQL表而不更改任何内容 - >它工作正常
  • 然后我将我的初始ASA作业更改为与示例中的ASA作业“相同”(写入SQL表) - >它工作正常
  • 然后我开始玩BLOB目录名 - >这里我发现了错误。

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

在我的情况下,我创建了名为“reference-data”的文件夹,并上传了名为“devices.json”的文件(文件夹结构“/reference-data/devices.json”) - > ASA输出到SQL表不能正常工作因为我已经将文件夹名称更改为“refdata”(文件夹结构“/referencedata/devices.json”) - > ASA输出到SQL表工作。

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

回顾一下:

  • 我建议不要在BLOB文件夹名称中使用“ - ”作为ASA作业中的静态参考数据输入。
© www.soinside.com 2019 - 2024. All rights reserved.