2017-01-24 24 views
1

我的流分析查詢有語法問題。以下是我的分析數據的查詢,在這裏我想從該事件得到以下字段:Stream Analytics中的語法問題在Azure中運行的查詢:列名無效:'payload'

  • 車輛ID
  • 以前和當前燃料水平(每 車輛)的差異,
  • DIFF電流和以前的里程錶值(每個車輛 )。

非工作QUERY

SELECT input.vehicleId, 
FUEL_DIFF = LAG(input.Payload.FuelLevel) OVER (PARTITION BY vehicleId LIMIT DURATION(minute, 1)) - input.Payload.FuelLevel, 
ODO_DIFF = input.Payload.OdometerValue - LAG(input.Payload.OdometerValue) OVER (PARTITION BY input.vehicleId LIMIT DURATION(minute, 1)) 
from input 

以下是在其上面的查詢/工作是在一系列事件的跑了一個樣本輸入事件:

{ 
     "IoTDeviceId":"DeviceId_1", 
     "MessageId":"03494607-3aaa-4a82-8e2e-149f1261ebbb", 
     "Payload":{ 
     "TimeStamp":"2017-01-23T11:16:02.2019077-08:00", 
     "FuelLevel":19.9, 
     "OdometerValue":10002 
     }, 
     "Priority":1, 
     "Time":"2017-01-23T11:16:02.2019077-08:00", 
     "VehicleId":"MyCar_1" 
    } 

以下語法錯誤當Stream Analytics作業運行時拋出:

無效的列名稱:'payload'。不存在具有這種名稱的列。

諷刺的是,下面的查詢工作得很好:

工作QUERY

SELECT input.vehicleId, 
FUEL_DIFF = LAG(input.Payload.FuelLevel) OVER (PARTITION BY vehicleId LIMIT DURATION(second, 1)) - input.Payload.FuelLevel 
from input 

工作的查詢和非工作QUERY之間的唯一diffrence是採用LAG結構的數量。非工作查詢有兩個LAG結構,而WORKING QUERY只有一個LAG結構。

我已經提到了流分析查詢語言,他們只有基本的例子。還嘗試瞭解多個博客。另外,我試過使用GetRecordPropertyValue()函數,但沒有運氣。請建議。

預先感謝您!

回答

0

這確實看起來像一個語法錯誤。感謝您報告 - 我們將在即將到來的更新中修復它。

請考慮使用此查詢作爲一種解決方法:

WITH Step1 AS 
(
SELECT vehicleId, Payload.FuelLevel, Payload.OdometerValue 
FROM input 
) 

SELECT vehicleId, 
FUEL_DIFF = LAG(FuelLevel) OVER (PARTITION BY vehicleId LIMIT DURATION(minute, 1)) - FuelLevel, 
ODO_DIFF = OdometerValue - LAG(OdometerValue) OVER (PARTITION BY vehicleId LIMIT DURATION(minute, 1)) 
from Step1