Лучший способ проанализировать такие сложные события - это пользовательская функция JavaScript. К сожалению, функции JavaScript не допускаются в выражении TIMESTAMP BY. Возможно, вы захотите разделить это на два запроса - один без TIMESTAMP BY, который «нормализует» данные и извлекает обязательные поля, и второй запрос, который использует TIMESTAMP BY и выполняет агрегирование окон.

я есть файл JSON, как показано ниже:

{"imei": {"imei": "358174069248418F", "imeiBinary": "NYF0BpJIQY8 =", "imeiNotEncoded": "358174069248418", "valid": 1}, "dataPackets": [["msy.mxet.at .AlarmNotification ", {" version ": 1," id ": 21," op ": 2," sizeDynamic ": 0," alarmStatus ": 4}], [" msy.mxp.datapacket.IOStatus ", {" версия ": 1," id ": 15," op ": 2," sizeDynamic ": 0," ioStatus ": 135," ioDirections ": 120}], [" msy.mxp.datapacket.LogicalStatus ", {" версия ": 1," id ": 16," op ": 2," sizeDynamic ": 0," logicStatus ": 5}], [" msy.mxp.datapacket.Position ", {" version ": 1," id ": 19," op ": 2," широта ": 40.835243," долгота ": 14.246057," высота ": 40," скорость ": 0," курс ": 68," gpsNumSatell ": 5," glonassNumSatell " : 1, "fixValid": 1, "timeValid": 1, "wgs84degMinFormat": 1, "glonass": 1, "fixMode": 3, "timestamp": {"timeSecFrom1Gen2000": 925560202, "time": 1490648755000} , "sizeDynamic": 0}]]}

и я читаю по следующему запросу:

WITH Datapackets AS
(
SELECT imei.imei as imei,
        persistent as persistent,
        [timestamp].[time] as input_time,
        compressed as compressed,
        GetArrayElement(dataPackets, 3) as position
FROM h24
), one as(
SELECT *,
GetRecordPropertyValue (GetArrayElement(position,1), 'timestamp') as position_timestamp --1st
from Datapackets 
), two as (
select
    imei,
    GetRecordPropertyValue (GetArrayElement(position,1), 'op') as position_OP,
    [position_timestamp].[time] as position_time,
    dateadd(S, [position_timestamp].[timeSecFrom1Gen2000], '1970-01-01') as timing,
GetRecordPropertyValue (GetArrayElement(position,1), 'latitude') as position_latitude,
GetRecordPropertyValue (GetArrayElement(position,1), 'longitude') as position_longitude,
GetRecordPropertyValue (GetArrayElement(position,1), 'altitude') as position_altitude,
GetRecordPropertyValue (GetArrayElement(position,1), 'speed') as position_speed
    from one) SELECT * from two

Теперь я хочу сделать падающую группу окна на 30 секунд следующим образом, но у меня есть проблема, которая говорит мне, что свойство метки времени не разрешено для входного файла «два», вот запрос, который я использую

    WITH Datapackets AS
    (
    SELECT imei.imei as imei,
            persistent as persistent,
            [timestamp].[time] as input_time,
            compressed as compressed,
            GetArrayElement(dataPackets, 3) as position
    FROM h24
    ), one as(
    SELECT *,
    GetRecordPropertyValue (GetArrayElement(position,1), 'timestamp') as position_timestamp --1st
    from Datapackets 
    ), two as (
    select
        imei,
        GetRecordPropertyValue (GetArrayElement(position,1), 'op') as position_OP,
        [position_timestamp].[time] as position_time,
        dateadd(S, [position_timestamp].[timeSecFrom1Gen2000], '1970-01-01') as timing,
GetRecordPropertyValue (GetArrayElement(position,1), 'latitude') as position_latitude,
GetRecordPropertyValue (GetArrayElement(position,1), 'longitude') as position_longitude,
GetRecordPropertyValue (GetArrayElement(position,1), 'altitude') as position_altitude,
GetRecordPropertyValue (GetArrayElement(position,1), 'speed') as position_speed
        from one) SELECT imei, System.TimeStamp AS 'start', Avg(position_speed), max(position_latitude)  
FROM two TIMESTAMP BY TIMING GROUP BY imei, TumblingWindow(duration(second, 30))

Ошибка появляется в последних двух строках (ИЗ двух TIMESTAMP BY TIMING),

************** Обновление ,, изучив больше, я обнаружил, что я могу использовать только опцию timestamp by во входных данных, и я должен использовать ее, только если я сделаю индивидуальную метку времени для события. Обычно они помечены временем прибытия по умолчанию (https://msdn.microsoft.com/en-us/library/mt573293.aspx)

Теперь моя проблема состоит в том, как поставить метку времени в моих событиях с полем времени, записанным в массиве 3-го уровня в файле Json, чтобы иметь возможность выполнять агрегацию.

Любые предложения о том, как я справляюсь с этой проблемой, спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос