Sdílet prostřednictvím


Migrace Time Series Insights Gen2 na inteligentní funkce v reálném čase v Microsoft Fabric

Poznámka:

Služba Time Series Insights bude vyřazena 7. července 2024. Zvažte migraci stávajících prostředí na alternativní řešení co nejdříve. Další informace o vyřazení a migraci najdete v naší dokumentaci.

Přehled

Eventhouse je databáze časových řad ve inteligentním čase v reálném čase. Slouží jako cíl pro migraci dat mimo Time Series Insights.

Doporučení pro migraci na vysoké úrovni

Funkce Doporučená migrace
Ingestování JSON z centra s plochou a zapouzdřením Získání dat z Azure Event Hubs
Otevřít studené úložiště Dostupnost Eventhouse OneLake
Konektor Power BI Použijte konektor Eventhouse Power BI. Přepište TSQ na KQL ručně.
Konektor Spark Migrace dat do Eventhouse Použití poznámkového bloku s Apache Sparkem k dotazování eventhouse nebo prozkoumání dat v jezeře pomocí poznámkového bloku
Hromadné nahrávání Získání dat z úložiště Azure
Model služby Time Series Dá se exportovat jako soubor JSON. Lze importovat do Eventhouse. Sémantika grafů Kusto umožňuje model, procházení a analýzu hierarchie modelů časových řad jako grafu.
Time Series Explorer Řídicí panel v reálném čase, sestava Power BI nebo napsání vlastního řídicího panelu pomocí KustoTrenderu
Dotazovací jazyk Přepište dotazy v KQL.

Migrace telemetrie

Pokud chcete načíst kopii všech dat v prostředí, použijte PT=Time složku v účtu úložiště. Další informace najdete v tématu Úložiště dat.

Migrace – krok 1 – získání statistik o telemetrických datech

Data

  1. Přehled env
    • Záznam ID prostředí z první části plně kvalifikovaného názvu domény aplikace Data Access (například d390b0b0-1445-4c0c-8365-68d6382c1c2a From .env.crystal-dev.windows-int.net)
  2. Přehled env –> Konfigurace úložiště –> Účet úložiště
  3. Získání statistik složek pomocí Průzkumník služby Storage
    • Velikost záznamu a počet objektů PT=Time blob složky

Migrace – krok 2 – migrace dat do eventhouse

Vytvoření eventhouse

Pokud chcete nastavit eventhouse pro proces migrace, postupujte podle kroků při vytváření eventhouse.

Přijímání dat

Pokud chcete načíst data pro účet úložiště odpovídající vaší instanci Time Series Insights, postupujte podle kroků při získávání dat ze služby Azure Storage.

Ujistěte se, že:

  1. Vyberte příslušný kontejner a zadejte jeho identifikátor URI spolu s potřebným tokenem SAS nebo klíčem účtu.

  2. Nakonfigurujte cestu ke složce filtrů souborů tak, aby V=1/PT=Time filtrovali relevantní objekty blob.

  3. Ověřte odvozené schéma a odeberte všechny zřídka dotazované sloupce a zachovejte alespoň časové razítko, sloupce TSID a hodnoty. Pokud chcete zajistit, aby se všechna vaše data zkopírovala do Eventhouse, přidejte další sloupec a použijte transformaci mapování DropMappedFields .

  4. Dokončete proces příjmu dat.

Dotazování na data

Když teď úspěšně ingestujete data, můžete je začít zkoumat pomocí sady dotazů KQL. Pokud potřebujete získat přístup k datům z vlastní klientské aplikace, eventhouse poskytuje sady SDK pro hlavní programovací jazyky, jako je C# (odkaz), Java (odkaz) a Node.js (odkaz).

Migrace modelu time series do Azure Data Exploreru

Model si můžete stáhnout ve formátu JSON z prostředí TSI pomocí uživatelského rozhraní PRŮZKUMNÍKa TSI nebo rozhraní API služby TSM Batch. Model je pak možné importovat do eventhouse.

  1. Stáhněte si TSM z uživatelského prostředí TSI.

  2. Odstraňte první tři řádky pomocí editoru Visual Studio Code nebo jiného editoru.

    Snímek obrazovky s migrací TSM do Azure Data Exploreru – Odstranění prvních 3 řádků

  3. Pomocí editoru Visual Studio Code nebo jiného editoru vyhledejte a nahraďte výraz regex \},\n \{}{

    Snímek obrazovky s migrací TSM do Azure Data Exploreru – vyhledání a nahrazení

  4. Ingestování ve formátu JSON do ADX jako samostatné tabulky pomocí funkce Načíst data z jednoho souboru

Po migraci dat časových řad do Eventhouse v reálném čase v prostředcích infrastruktury můžete využít sílu sémantiky grafů Kusto k kontextování a analýze dat. Sémantika grafu Kusto umožňuje modelovat, procházet a analyzovat hierarchii modelu časové řady jako graf. Pomocí sémantiky grafů Kusto můžete získat přehled o vztazích mezi různými entitami v datech časových řad, jako jsou prostředky, weby a datové body. Tyto přehledy vám pomůžou porozumět závislostem a interakcím mezi různými součástmi systému.

Překlad dotazů časových řad (TSQ) do KQL

GetEvents

{
  "getEvents": {
    "timeSeriesId": [
      "assest1",
      "siteId1",
      "dataId1"
    ],
    "searchSpan": {
      "from": "2021-11-01T00:00:0.0000000Z",
      "to": "2021-11-05T00:00:00.000000Z"
    },
    "inlineVariables": {},
  }
}
events
| where timestamp >= datetime(2021-11-01T00:00:0.0000000Z) and timestamp < datetime(2021-11-05T00:00:00.000000Z)
| where assetId_string == "assest1" and siteId_string == "siteId1" and dataid_string == "dataId1"
| take 10000

GetEvents s filtrem

{
  "getEvents": {
    "timeSeriesId": [
      "deviceId1",
      "siteId1",
      "dataId1"
    ],
    "searchSpan": {
      "from": "2021-11-01T00:00:0.0000000Z",
      "to": "2021-11-05T00:00:00.000000Z"
    },
    "filter": {
      "tsx": "$event.sensors.sensor.String = 'status' AND $event.sensors.unit.String = 'ONLINE"
    }
  }
} 
events
| where timestamp >= datetime(2021-11-01T00:00:0.0000000Z) and timestamp < datetime(2021-11-05T00:00:00.000000Z)
| where deviceId_string== "deviceId1" and siteId_string == "siteId1" and dataId_string == "dataId1"
| where ['sensors.sensor_string'] == "status" and ['sensors.unit_string'] == "ONLINE"
| take 10000

GetEvents s projektovanou proměnnou

{
  "getEvents": {
    "timeSeriesId": [
      "deviceId1",
      "siteId1",
      "dataId1"
    ],
    "searchSpan": {
      "from": "2021-11-01T00:00:0.0000000Z",
      "to": "2021-11-05T00:00:00.000000Z"
    },
    "inlineVariables": {},
    "projectedVariables": [],
    "projectedProperties": [
      {
        "name": "sensors.value",
        "type": "String"
      },
      {
        "name": "sensors.value",
        "type": "bool"
      },
      {
        "name": "sensors.value",
        "type": "Double"
      }
    ]
  }
}	 
events
| where timestamp >= datetime(2021-11-01T00:00:0.0000000Z) and timestamp < datetime(2021-11-05T00:00:00.000000Z)
| where deviceId_string== "deviceId1" and siteId_string == "siteId1" and dataId_string == "dataId1"
| take 10000
| project timestamp, sensorStringValue= ['sensors.value_string'], sensorBoolValue= ['sensors.value_bool'], sensorDoublelValue= ['sensors.value_double']

AggregateSeries

{
  "aggregateSeries": {
    "timeSeriesId": [
      "deviceId1"
    ],
    "searchSpan": {
      "from": "2021-11-01T00:00:00.0000000Z",
      "to": "2021-11-05T00:00:00.0000000Z"
    },
    "interval": "PT1M",
    "inlineVariables": {
      "sensor": {
        "kind": "numeric",
        "value": {
          "tsx": "coalesce($event.sensors.value.Double, todouble($event.sensors.value.Long))"
        },
        "aggregation": {
          "tsx": "avg($value)"
        }
      }
    },
    "projectedVariables": [
      "sensor"
    ]
  }	
events
| where timestamp >= datetime(2021-11-01T00:00:00.0000000Z) and timestamp < datetime(2021-11-05T00:00:00.0000000Z)
| where  deviceId_string == "deviceId1"
| summarize avgSensorValue= avg(coalesce(['sensors.value_double'], todouble(['sensors.value_long']))) by bin(IntervalTs = timestamp, 1m)
| project IntervalTs, avgSensorValue

AggregateSeries s filtrem

{
  "aggregateSeries": {
    "timeSeriesId": [
      "deviceId1"
    ],
    "searchSpan": {
      "from": "2021-11-01T00:00:00.0000000Z",
      "to": "2021-11-05T00:00:00.0000000Z"
    },
    "filter": {
      "tsx": "$event.sensors.sensor.String = 'heater' AND $event.sensors.location.String = 'floor1room12'"
    },
    "interval": "PT1M",
    "inlineVariables": {
      "sensor": {
        "kind": "numeric",
        "value": {
          "tsx": "coalesce($event.sensors.value.Double, todouble($event.sensors.value.Long))"
        },
        "aggregation": {
          "tsx": "avg($value)"
        }
      }
    },
    "projectedVariables": [
      "sensor"
    ]
  }
}	
events
| where timestamp >= datetime(2021-11-01T00:00:00.0000000Z) and timestamp < datetime(2021-11-05T00:00:00.0000000Z)
| where  deviceId_string == "deviceId1"
| where ['sensors.sensor_string'] == "heater" and ['sensors.location_string'] == "floor1room12"
| summarize avgSensorValue= avg(coalesce(['sensors.value_double'], todouble(['sensors.value_long']))) by bin(IntervalTs = timestamp, 1m)
| project IntervalTs, avgSensorValue

Power BI

Neexistuje žádný automatizovaný proces migrace sestav Power BI založených na Time Series Insights. Všechny dotazy, které spoléhají na data uložená v Time Series Insights, musí být migrovány do eventhouse.

Pokud chcete vytvářet efektivní sestavy časových řad v Power BI, doporučujeme odkazovat na následující informativní blogové články:

Pokyny k vytváření efektivních sestav časových řad v Power BI najdete v těchto zdrojích informací.

Řídicí panel v reálném čase

Řídicí panel v reálném čase v prostředcích infrastruktury je kolekce dlaždic, která je volitelně uspořádaná na stránkách, kde má každá dlaždice podkladový dotaz a vizuální reprezentaci. Dotazy dotazovací jazyk Kusto (KQL) můžete nativně exportovat do řídicího panelu jako vizuály a později upravit jejich podkladové dotazy a formátování vizuálů podle potřeby. Kromě snadného zkoumání dat poskytuje toto plně integrované prostředí řídicího panelu lepší výkon dotazů a vizualizací.

Začněte vytvořením nového řídicího panelu v sadě Fabric v reálném čase. Tato výkonná funkce umožňuje zkoumat data, přizpůsobovat vizuály, používat podmíněné formátování a využívat parametry. Kromě toho můžete vytvářet výstrahy přímo z řídicích panelů v reálném čase a vylepšit tak možnosti monitorování. Podrobné pokyny k vytvoření řídicího panelu najdete v oficiální dokumentaci.