Azure Размер серии - PullRequest
       13

Azure Размер серии

0 голосов
/ 15 февраля 2020

Я реализовал агрегатный API (GA) для анализа временных рядов, чтобы получить агрегатные значения датчика.

Это мой входной сигнал для созданного мной промежуточного API:

{

    "PropertyName": "Prop1",
    "PropertyValue": "ProVal",
    "MeasuredValue": "Signal",
    "FromDateTime": "2020-02-13T04:00:00.000Z",
    "ToDateTime": "2020-02-13T04:01:00.000Z",
    "EnvironmentFqdn": "fqdnvalue.env.timeseries.azure.com",
    "BucketSize":"60s"
}

Ответ, как и ожидалось:

[
    {
        "productTimeSeries": [
            {
                "deviceId": "SensorId",
                "deviceAggregateTimeSeries": [
                    {
                        "bucket": "2020-02-13T04:00:00Z",
                        "avg": 296.0,
                        "min": 296.0,
                        "max": 296.0
                    }
                ]
            }
        ]
    }
]

Однако, если я изменю время от и до даты, а затем обновлю размер корзины:

{

        "PropertyName": "Prop1",
        "PropertyValue": "ProVal",
        "MeasuredValue": "Signal",
        "FromDateTime": "2020-02-13T04:00:00.000Z",
        "ToDateTime": "2020-02-13T04:01:02.000Z",
        "EnvironmentFqdn": "fqdnvalue.env.timeseries.azure.com",
        "BucketSize":"62s"
    }

Вот мой ответ:

[
    {
        "productTimeSeries": [
            {
                "deviceId": "SensorId",
                "deviceAggregateTimeSeries": [
                    {
                        "bucket": "2020-02-13T03:59:20Z",
                        "avg": 296.0,
                        "min": 296.0,
                        "max": 296.0
                    },
                    {
                        "bucket": "2020-02-13T04:00:22Z",
                        "avg": 296.0,
                        "min": 296.0,
                        "max": 296.0
                    }
                ]
            }
        ]
    }
]

Теперь, поскольку размер корзины равен разнице во времени между временем от и до даты, я ожидаю только один результат, как в первом случае, но я получаю два результата. Почему это происходит?

Внутренне это вызывает API статистических данных фактических временных рядов с запросом, сформированным следующим образом:

JObject contentInputPayloadAggregates = new JObject(
                    new JProperty("searchSpan", new JObject(
                        new JProperty("from", getTelemetry.FromDateTime),
                        new JProperty("to", getTelemetry.ToDateTime))),
                     getPredicateSingle(getTelemetry.PropertyName, getTelemetry.PropertyValue),

                     new JProperty("aggregates", new JArray(new JObject(
                        new JProperty("dimension", new JObject(
                            new JProperty("uniqueValues", new JObject(
                                new JProperty("input", new JObject(
                                    new JProperty("property", getTelemetry.PropertyName),
                                    new JProperty("type", "String")
                                    )),
                                new JProperty("take", 100)
                                ))
                            )),
                        new JProperty("aggregate", new JObject(
                            new JProperty("dimension", new JObject(
                            new JProperty("dateHistogram", new JObject(
                                new JProperty("input", new JObject(
                                    new JProperty("builtInProperty", "$ts")

                                    )),
                                new JProperty("breaks", new JObject(
                                        new JProperty("size", getTelemetry.BucketSize)
                                        ))
                                ))
                            )),
                        new JProperty("measures", new JArray(new JObject(
                            new JProperty("avg", new JObject(
                                new JProperty("input", new JObject(
                                    new JProperty("property", getTelemetry.MeasuredValue),
                                    new JProperty("type", "Double")
                                    ))
                                ))
                            ),
                            new JObject(
                            new JProperty("min", new JObject(
                                new JProperty("input", new JObject(
                                    new JProperty("property", getTelemetry.MeasuredValue),
                                    new JProperty("type", "Double")
                                    ))
                                ))
                            ),
                            new JObject(
                            new JProperty("max", new JObject(
                                new JProperty("input", new JObject(
                                    new JProperty("property", getTelemetry.MeasuredValue),
                                    new JProperty("type", "Double")
                                    ))
                                ))
                            )
                            ))

                            ))


                         )))

                    );

1 Ответ

0 голосов
/ 25 февраля 2020

Инсайты временных рядов используют метод, в котором мы подсчитываем тики эпох (количество миллисекунд, прошедших с 1 января 0001 г.) и делим тики на выбранные интервалы, в вашем случае 60 или 62 секунды. Мы внутренне корректируем диапазон поиска, чтобы он соответствовал вычисленным временным меткам интервалов.

В зависимости от того, сколько интервалов является результатом расчета, вы можете увидеть 1 или 2 сегмента.

...