2017-01-24 14 views
1

У меня возникла проблема синтаксиса с моим запросом аналитики потока. Ниже мой поток Analytics запрос, где я пытаюсь получить следующие поля из событий:Проблема синтаксиса в потоковой аналитике Запрос в Azure: Недопустимое имя столбца: 'полезная нагрузка'

  • Id автомобиля
  • Diff предыдущего и текущего уровня топлива (для каждого транспортного средства),
  • 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:

Недопустимое имя столбца: «полезная нагрузка». Столбец с таким именем не существует.

Как ни странно, следующий запрос работает просто отлично:

РАБОЧЕЙ QUERY

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

Единственные разностным между РАБОЧЕЙ QUERY и нерабочим QUERY является количеством LAG используемых конструкций. В НЕВЕРНОМ ЗАПРОСЕ есть две конструкции LAG, а WORKING QUERY имеет только одну конструкцию LAG.

Я ссылался на язык запросов Analytics Analytics, у них есть только базовые примеры. Также попытался изучить несколько блогов. Кроме того, я пробовал использовать функцию 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