Синтаксическая проблема в Stream Analytics Query, работающем в Azure: неверное имя столбца: "полезная нагрузка"

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

  • Идентификатор автомобиля
  • Разница предыдущего и текущего уровня топлива (для каждого транспортного средства),
  • Разница текущего и предыдущего значения одометра (для каждого транспортного средства).

Неработающий запрос

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 генерируется следующая синтаксическая ошибка:

Неверное имя столбца: "полезная нагрузка". Колонка с таким названием не существует.

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

РАБОЧИЙ ЗАПРОС

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

Единственное различие между РАБОЧИМ ЗАПРОСОМ и НЕ РАБОЧИМ ЗАПРОСОМ - это количество используемых конструкций LAG. У НЕ РАБОЧЕГО ЗАПРОСА есть две конструкции LAG, а у РАБОЧЕГО ЗАПРОСА есть только одна конструкция LAG.

Я ссылался на язык запросов Stream Analytics, у них есть только базовые примеры. Также попытался заглянуть в несколько блогов. Кроме того, я попытался использовать функцию GetRecordPropertyValue (), но не повезло. Пожалуйста, предложите.

Заранее спасибо!

1 ответ

Решение

Это действительно похоже на синтаксическую ошибку. Спасибо за сообщение - мы исправим это в следующих обновлениях.

Пожалуйста, рассмотрите возможность использования этого запроса в качестве обходного пути:

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
Другие вопросы по тегам