Migración de Time Series Insights Gen1 a Azure Data Explorer

Nota:

El servicio Time Series Insights (TSI) dejará de admitirse a partir de marzo de 2025. Considere la posibilidad de migrar los entornos de TSI existentes a soluciones alternativas lo antes posible. Para más información sobre la entrada en desuso y la migración, consulte nuestra documentación.

Información general

La recomendación es configurar un clúster de Azure Data Explorer con un nuevo grupo de consumidores desde el centro de eventos o IoT Hub y esperar a que pase el período de retención y rellene Azure Data Explorer con los mismos datos que el entorno de Time Series Insights. Si es necesario exportar datos de telemetría desde el entorno de Time Series Insights, la sugerencia es usar la API de consulta de Time Series Insights para descargar los eventos en lotes y serializarlos en el formato necesario. En el caso de los datos de referencia, se pueden usar el Explorador de Time Series Insights o la API de datos de referencia para descargar el conjunto de datos de referencia y cargarlo en Azure Data Explorer como otra tabla. A continuación, se pueden usar vistas materializadas de Azure Data Explorer para unir los datos de referencia con los datos de telemetría. Use la vista materializada con la función de agregación arg_max(), que obtiene el registro más reciente por cada entidad, como se muestra en el ejemplo siguiente. Para más información sobre las vistas materializadas, consulte la siguiente documentación: Casos de uso de vistas materializadas.

.create materialized-view MVName on table T
{
    T
    | summarize arg_max(Column1,*) by Column2
}

Traducción de consultas de Time Series Insights a KQL

Para las consultas, se recomienda usar KQL en Azure Data Explorer.

Eventos

{
  "searchSpan": {
    "from": "2021-11-29T22:09:32.551Z",
    "to": "2021-12-06T22:09:32.551Z"
  },
  "predicate": {
    "predicateString": "([device_id] = 'device_0') AND ([has_error] != null OR [error_code] != null)"
  },
  "top": {
    "sort": [
      {
        "input": {
          "builtInProperty": "$ts"
        },
        "order": "Desc"
      }
    ],
    "count": 100
  }
}
	events
| where _timestamp >= datetime("2021-11-29T22:09:32.551Z") and _timestamp < datetime("2021-12-06T22:09:32.551Z") and deviceid == "device_0" and (not(isnull(haserror)) or not(isempty(errorcode)))
| top 100 by _timestamp desc

Agregados

{
    "searchSpan": {
      "from": "2021-12-04T22:30:00Z",
      "to": "2021-12-06T22:30:00Z"
    },
    "predicate": {
      "eq": {
        "left": {
          "property": "DeviceId",
          "type": "string"
        },
        "right": "device_0"
      }
    },
    "aggregates": [
      {
        "dimension": {
          "uniqueValues": {
            "input": {
              "property": "DeviceId",
              "type": "String"
            },
            "take": 1
          }
        },
        "aggregate": {
          "dimension": {
            "dateHistogram": {
              "input": {
                "builtInProperty": "$ts"
              },
              "breaks": {
                "size": "2d"
              }
            }
          },
          "measures": [
            {
              "count": {}
            },
            {
              "sum": {
                "input": {
                  "property": "DataValue",
                  "type": "Double"
                }
              }
            },
            {
              "min": {
                "input": {
                  "property": "DataValue",
                  "type": "Double"
                }
              }
            },
            {
              "max": {
                "input": {
                  "property": "DataValue",
                  "type": "Double"
                }
              }
            }
          ]
        }
      }
    ]
  }

	let _q = events | where _timestamp >= datetime("2021-12-04T22:30:00Z") and _timestamp < datetime("2021-12-06T22:30:00Z") and deviceid == "device_0";
let _dimValues0 = _q | project deviceId | sample-distinct 1 of deviceId;
_q
| where deviceid in (_dimValues0) or isnull(deviceid)
| summarize
    _meas0 = count(),
    _meas1 = iff(isnotnull(any(datavalue)), sum(datavalue), any(datavalue)),
    _meas2 = min(datavalue),
    _meas3 = max(datavalue),
    by _dim0 = deviceid, _dim1 = bin(_timestamp, 2d)
| project
    _dim0,
    _dim1,
    _meas0,
    _meas1,
    _meas2,
    _meas3,
| sort by _dim0 nulls last, _dim1 nulls last