我将以下输入流数据输入到Stream Analytics。
[
{
"timestamp": 1559529369274,
"values": [
{
"id": "SimCh01.Device01.Ramp1",
"v": 39,
"q": 1,
"t": 1559529359833
},
{
"id": "SimCh01.Device01.Ramp2",
"v": 183.5,
"q": 1,
"t": 1559529359833
}
],
"EventProcessedUtcTime": "2019-06-03T02:37:29.5824231Z",
"PartitionId": 3,
"EventEnqueuedUtcTime": "2019-06-03T02:37:29.4390000Z",
"IoTHub": {
"MessageId": null,
"CorrelationId": null,
"ConnectionDeviceId": "ew-IoT-01-KepServer",
"ConnectionDeviceGenerationId": "636948080712635859",
"EnqueuedTime": "2019-06-03T02:37:29.4260000Z",
"StreamId": null
}
}
]
我尝试提取“ values”数组,并在TIMESTAMP BY中的数组元素中指定“ t”
我能够在Stream Analytics中使用简单的SAQL语句进行查询,以读取输入并路由到输出。但是,我只对上面的“ values”数组感兴趣。
这是我的第一次尝试。当我尝试重新启动Stream Analytics Job时,它不喜欢我的“ TIMESTAMP BY”语句
SELECT
KepValues.ArrayValue.id,
KepValues.ArrayValue.v,
KepValues.ArrayValue.q,
KepValues.ArrayValue.t
INTO
[PowerBI-DS]
FROM
[IoTHub-Input] as event
CROSS APPLY GetArrayElements(event.[values]) as KepValues
TIMESTAMP BY KepValues.ArrayValue.t
================================================ ============================== 这是我的第二次尝试。它仍然不喜欢我的“ TIMESTAMP BY”语句。
With [PowerBI-Modified-DS] As (
SELECT
KepValues.ArrayValue.id as ID,
KepValues.ArrayValue.v as V,
KepValues.ArrayValue.q as Q,
KepValues.ArrayValue.t as T
FROM
[IoTHub-Input] as event
CROSS APPLY GetArrayElements(event.[values]) as KepValues
)
SELECT
ID, V, Q, T
INTO
[PowerBI-DS]
FROM
[PowerBI-Modified-DS] TIMESTAMP BY T
提取后,这就是我所期望的,具有“ id”,“ v”,“ q”,“ t”列的表,每行将具有单个ArrayElement。例如,
"SimCh01.Device01.Ramp1", 39, 1, 1559529359833
"SimCh01.Device01.Ramp2", 183.5, 1, 1559529359833
从那时起,我将查询修改如下,以通过将Unix时间t转换为DateTime时间来创建DateTime
With [PowerBI-Modified-DS] As (
SELECT
arrayElement.ArrayValue.id as ID,
arrayElement.ArrayValue.v as V,
arrayElement.ArrayValue.q as Q,
arrayElement.ArrayValue.t as TT
FROM
[IoTHub-Input] as iothubAlias
CROSS APPLY GetArrayElements(iothubAlias.data) as arrayElement
)
SELECT
ID, V, Q, DATEADD(millisecond, TT, '1970-01-01T00:00:00Z') as T
INTO
[SAJ-01-PowerBI]
FROM
[PowerBI-Modified-DS]
我设法添加DATEADD()将Unix Time转换为DateTime并将其称为T。现在如何添加'TIMESTAMP BY'。我确实尝试在[PowerBI-Modified-DS]之后添加。但是编辑器抱怨插入无效。我还可以做些什么。或这是我能做的最好的。我了解我需要设置“ TIMESTAMP BY”,因此Power BI了解这是流数据。
答案 0 :(得分:0)
TIMESTAMP BY clause in Stream Analytics的值必须为DATETIME类型。支持符合ISO 8601格式的字符串值。在您的示例中,“ t”的值不符合该标准。
要在这种情况下使用TIMESTAMP BY子句,您必须先对数据进行预处理,然后再将其发送到Stream Analytics或更改源以使用此格式创建事件(特别是字段“ t”)。
在执行查询之前,Stream Analytics分配TIMESTAMP。因此,TIMESTAMP BY表达式只能引用输入有效负载中的字段。您有2个选择。