Синтаксическая проблема в 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