使用参考数据时,流分析不会向 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.
数据流概览 - 遥测:
- 我有许多不同类型的设备(热泵、电池、水泵、空调...)。这些设备中的每一个都有不同的 JSON 遥测数据架构。我可以通过消息中的属性区分 JSONs (e.g.: "DeviceType":"HeatPump" 或 "DeviceType":"AirCon"...)
- 所有这些设备都将其遥测数据发送到单个事件中心
- 在事件中心后面,有一个流分析组件,我在其中根据属性设备类型将流重定向到不同的输出。例如,我使用查询
SELECT * INTO output-sql-table FROM input-event-hub WHERE DeviceType = 'HeatPump'
重定向来自 HeatPumps 的遥测数据
在将流插入 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 作业中的静态参考数据输入。
我最近在使用 ASA,我正在尝试使用参考数据将 ASA 流直接插入 SQL table。我的开发基于这篇 MS 文章:https://msdn.microsoft.com/en-us/azure/stream-analytics/reference/reference-data-join-azure-stream-analytics.
数据流概览 - 遥测:
- 我有许多不同类型的设备(热泵、电池、水泵、空调...)。这些设备中的每一个都有不同的 JSON 遥测数据架构。我可以通过消息中的属性区分 JSONs (e.g.: "DeviceType":"HeatPump" 或 "DeviceType":"AirCon"...)
- 所有这些设备都将其遥测数据发送到单个事件中心
- 在事件中心后面,有一个流分析组件,我在其中根据属性设备类型将流重定向到不同的输出。例如,我使用查询
SELECT * INTO output-sql-table FROM input-event-hub WHERE DeviceType = 'HeatPump'
重定向来自 HeatPumps 的遥测数据
在将流插入 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 作业中的静态参考数据输入。