Share via


Time Series Elemzések (TSI) Gen2 migrálása az Azure Data Explorerbe

Feljegyzés

A Time Series Elemzések (TSI) szolgáltatás 2025 márciusa után már nem támogatott. Fontolja meg a meglévő TSI-környezetek migrálását alternatív megoldásokba a lehető leghamarabb. Az elavulással és a migrálással kapcsolatos további információkért tekintse meg dokumentációnkat.

Áttekintés

Magas szintű migrálási javaslatok.

Szolgáltatás Gen2 állapot Migrálás javasolt
JSON betöltése a központból lapított és menekülő állapotban TSI-betöltés ADX – OneClick Ingest /Wizard
Hidegáruház megnyitása Ügyfél tárfiókja Folyamatos adatexportálás az ügyfél által megadott külső táblába az ADLS-ben.
PBI-Csatlakozás or Privát előzetes verzió Használja az ADX PBI Csatlakozás ort. Írja át manuálisan a TSQ-t a KQL-be.
Spark-összekötő Privát előzetes verzió. Telemetriaadatok lekérdezése. Modelladatok lekérdezése. Adatok áttelepítése az ADX-be. Használja az ADX Spark-összekötőt telemetriai adatokhoz+ exportálja a modellt JSON-ba, és töltse be a Sparkban. Írja át a lekérdezéseket a KQL-ben.
Tömeges feltöltés Privát előzetes verzió Használja az ADX OneClick Ingest és LightIngest parancsot. Igény szerint állítsa be a particionálást az ADX-ben.
Time Series-modell JSON-fájlként exportálható. Az ADX-be importálva illesztések végezhetők a KQL-ben.
TSI Explorer Meleg és hideg toggling ADX-irányítópultok
Lekérdezés nyelve Idősoros lekérdezések (TSQ) Írja át a lekérdezéseket a KQL-ben. TSI-k helyett Kusto SDK-k használata.

Telemetria migrálása

A PT=Time tárfiók mappájában kérje le a környezet összes telemetriájának másolatát. További információ: Data Storage.

1. migrálási lépés – A telemetriai adatok statisztikáinak lekérése

Adatok

  1. Az Env áttekintése
    • A Data Access teljes tartománynevének első részéből származó környezeti azonosító rögzítése (például d390b0b0-1445-4c0c-8365-68d6382c1c2a From .env.crystal-dev.windows-int.net)
  2. Env – Áttekintés –> Tárkonfiguráció –> Tárfiók
  3. Mappastatisztikák lekérése a Storage Explorer használatával
    • Rekordméret és a mappablobok PT=Time száma. A Tömeges importálás privát előzetes verziójában lévő ügyfelek számára a blobok rekordmérete PT=Import és száma is.

2. migrálási lépés – Telemetriai adatok migrálása az ADX-be

ADX-fürt létrehozása

  1. Adja meg a fürt méretét az adatméret alapján az ADX Költségbecslő használatával.

    1. Az Event Hubs (vagy az IoT Hub) metrikáiból lekérheti a naponta betöltött adatok arányát. A TSI-környezethez csatlakoztatott tárfiókból kérje le, hogy mennyi adat található a TSI által használt blobtárolóban. Ez az információ az ADX-fürt ideális méretének kiszámítására szolgál a környezet számára.
    2. Nyissa meg az Azure Data Explorer Költségbecslőt , és töltse ki a meglévő mezőket a talált információkkal. Állítsa be a "Számítási feladat típusa" értéket a "Tárolásra optimalizált" és a "Gyakori adatok" értékre az aktív lekérdezett adatok teljes mennyiségével.
    3. Az összes információ megadása után az Azure Data Explorer Költségbecslője javaslatot tesz a virtuális gép méretére és a fürt példányainak számára. Elemezze, hogy az aktív lekérdezett adatok mérete elfér-e a gyorsgyorsítótárban. Szorozza meg a javasolt példányok számát a virtuális gép méretének gyorsítótárméretével, példánként:
      • Költségbecslő javaslat: 9x DS14 + 4 TB (gyorsítótár)
      • Javasolt teljes gyorsgyorsítótár: 36 TB = [9x (példányok) x 4 TB (gyorsgyorsítótár csomópontonként)]
    4. További megfontolandó tényezők:
      • Környezet növekedése: az ADX-fürt méretének tervezésekor vegye figyelembe az adatnövekedést az idő során.
      • Hidratálás és particionálás: az ADX-fürtön lévő példányok számának meghatározásakor fontolja meg a további csomópontokat (2-3x-tal) a hidratálás és particionálás felgyorsítása érdekében.
      • A számítási kijelölésről további információt az Azure Data Explorer-fürt megfelelő számítási termékváltozatának kiválasztása című témakörben talál.
  2. A fürt és az adatbetöltés legjobb monitorozásához engedélyeznie kell a diagnosztikai Gépház, és el kell küldenie az adatokat egy Log Analytics-munkaterületre.

    1. Az Azure Data Explorer panelen válassza a "Figyelés | Diagnosztikai beállítások", majd kattintson a "Diagnosztikai beállítás hozzáadása" elemre

      Képernyőkép az Azure Data Explorer Monitorozás paneljéről | Diagnosztikai beállítások

    2. Töltse ki a következőt

      1. Diagnosztikai beállítás neve: A konfiguráció megjelenítendő neve
      2. Naplók: Legalább válassza a SucceededIngestion, FailedIngestion, IngestionBatching lehetőséget
      3. Válassza ki a Log Analytics-munkaterületet az adatok elküldéséhez (ha nem rendelkezik olyannal, amelybe a lépés előtt ki kell építenie egyet)

      Képernyőkép az Azure Data Explorer Log Analytics-munkaterületéről

  3. Adatparticionálás.

    1. A legtöbb adathalmaz esetében elegendő az alapértelmezett ADX-particionálás.
    2. Az adatparticionálás nagyon specifikus forgatókönyvekben hasznos, és másképpen nem alkalmazható:
      1. A lekérdezések késésének javítása olyan big data-készletekben, ahol a lekérdezések többsége nagy számosságú sztringoszlopra szűr, például idősorozat-azonosítóra.
      2. A rendelésen kívüli adatok betöltésekor, például amikor a múlt eseményei napokat vagy heteket is betölthetnek a forrásban lévő generáció után.
    3. További információt az ADX adatparticionálási szabályzatában talál.

Adatbetöltés előkészítése

  1. Odamegy https://dataexplorer.azure.com.

    Képernyőkép az Azure Data Explorer kezdőlapjáról

  2. Lépjen az Adatok lapra, és válassza a "Betöltés blobtárolóból" lehetőséget

    Képernyőkép az Azure Data Explorer blobtárolóból való betöltéséről

  3. Válassza a Fürt, adatbázis lehetőséget, és hozzon létre egy új táblát a TSI-adatokhoz választott névvel

    Képernyőkép a fürt, az adatbázis és a tábla Azure Data Explorer-betöltési kiválasztásáról

  4. Válassza a Tovább elemet: Forrás

  5. A Forrás lapon válassza a következőt:

    1. Történelmi adatok
    2. "Tároló kiválasztása"
    3. Válassza ki a TSI-adatok előfizetési és tárolási fiókját
    4. Válassza ki a TSI-környezettel korreláló tárolót

    Képernyőkép a tároló Azure Data Explorer betöltési kiválasztásáról

  6. Kiválasztás a Speciális beállítások területen

    1. Létrehozási idő minta: '/'yyyyyMMddHmmssfff'_'
    2. Blobnévminta: *.parquet
    3. Válassza a "Ne várja meg, amíg a betöltés befejeződik" lehetőséget

    Képernyőkép az Azure Data Explorer speciális beállítások betöltési kiválasztásáról

  7. A Fájlszűrők csoportban adja hozzá a mappa elérési útját V=1/PT=Time

    Képernyőkép az Azure Data Explorer mappaelérési útvonalának betöltési kiválasztásáról

  8. Válassza a Tovább elemet: Séma

    Feljegyzés

    A TSI a Parquet-fájlok oszlopainak megőrzésekor alkalmaz némi simítást és menekülést. További részletekért tekintse meg ezeket a hivatkozásokat: összeolvasztási és menekülési szabályok, betöltési szabályok frissítései.

  • Ha a séma ismeretlen vagy változó

    1. Távolítsa el a ritkán lekérdezett összes oszlopot, és hagyja meg legalább az időbélyeget és a TSID oszlop(ok)t.

      Képernyőkép az Azure Data Explorer sémabetöltési kiválasztásáról

    2. Adjon hozzá új dinamikus típusú oszlopot, és képezze le a teljes rekordra a $ elérési út használatával.

      Képernyőkép az Azure Data Explorer dinamikus típusú betöltéséről

      Példa:

      Képernyőkép az Azure Data Explorer dinamikus típusra vonatkozó betöltéséről

  • Ha a séma ismert vagy javítva van

    1. Ellenőrizze, hogy az adatok helyesek-e. Szükség esetén javítsa ki a típusokat.
    2. Válassza a Tovább elemet: Összegzés

Másolja ki a LightIngest parancsot, és tárolja valahol, hogy a következő lépésben használhassa.

Képernyőkép az Azure Data Explorer Betöltés a Lightingesthez parancsáról

Adatfeldolgozás

Az adatok betöltése előtt telepítenie kell a LightIngest eszközt. A One-Click eszközből létrehozott parancs tartalmaz egy SAS-jogkivonatot. A legjobb, ha újat hoz létre, hogy szabályozhassa a lejárati időt. A portálon lépjen a TSI-környezet blobtárolójához, és válassza a "Megosztott hozzáférési jogkivonat" lehetőséget

Képernyőkép az Azure Data Explorer SAS-jogkivonathoz való betöltéséről

Feljegyzés

Azt is javasoljuk, hogy skálázza fel a fürtöt, mielőtt elindít egy nagy betöltést. Például: D14 vagy D32 8+ példányokkal.

  1. Az alábbiak beállítása

    1. Engedélyek: Olvasás és lista
    2. Lejárat: Állítson be egy olyan időszakot, amikor az adatok áttelepítése befejeződött

    Képernyőkép az Azure Data Explorer engedély lejárati idejének betöltéséről

  2. Válassza a "Sas-jogkivonat és URL-cím létrehozása" lehetőséget, és másolja a "Blob SAS URL-címet"

    Képernyőkép az Azure Data Explorer SAS Blob URL-címének betöltéséről

  3. Lépjen a korábban másolt LightIngest parancsra. Cserélje le a -source paramétert a parancsban erre a "SAS Blob URL-címre"

  4. 1. lehetőség: Az összes adat betöltése. Kisebb környezetek esetén az összes adatot egyetlen paranccsal lehet betölteni.

    1. Nyisson meg egy parancssort, és váltson arra a könyvtárra, amelybe a LightIngest eszközt kinyerték. Miután ott volt, illessze be a LightIngest parancsot, és hajtsa végre.

    Képernyőkép az Azure Data Explorer parancssori betöltéséről

  5. 2. lehetőség: Adatok betöltése év vagy hónap szerint. Nagyobb környezetek esetén vagy kisebb adathalmaz teszteléséhez tovább szűrheti a Lightingest parancsot.

    1. Év szerint: Az -prefix paraméter módosítása

      • Előtte: -prefix:"V=1/PT=Time"
      • Utána: -prefix:"V=1/PT=Time/Y=<Year>"
      • Példa: -prefix:"V=1/PT=Time/Y=2021"
    2. Hónap szerint: Az -prefix paraméter módosítása

      • Előtte: -prefix:"V=1/PT=Time"
      • Utána: -prefix:"V=1/PT=Time/Y=<Year>/M=<month #>"
      • Példa: -prefix:"V=1/PT=Time/Y=2021/M=03"

Miután módosította a parancsot, hajtsa végre a fentihez hasonlóan. Az egyik betöltés befejeződött (az alábbi monitorozási lehetőség használatával) módosítsa a következő évre és hónapra vonatkozó parancsot, amelyet be szeretne tölteni.

Figyelési betöltés

A LightIngest parancs tartalmazta a -dontWait jelzőt, így maga a parancs nem várja meg a betöltés befejezését. A folyamat előrehaladásának figyelésére a legjobb módszer a portálon belüli "Elemzések" fül használata. Nyissa meg az Azure Data Explorer-fürt portálon belüli szakaszát, és lépjen a "Figyelés | Elemzések'

Képernyőkép az Azure Data Explorer monitorozási Elemzések való betöltéséről

A "Betöltés (előzetes verzió)" szakasz az alábbi beállításokkal figyelheti a betöltési folyamatokat.

  • Időtartomány: Utolsó 30 perc
  • A sikeres és a táblázatos keresés
  • Ha bármilyen hibát észlel, tekintse meg a Sikertelen és a Táblázat szerint című

Képernyőkép az Azure Data Explorer monitorozási eredmények betöltéséről

Tudni fogja, hogy a betöltési művelet befejeződött, amint a metrikák a táblához tartozó 0-ra kerülnek. Ha további részleteket szeretne látni, használhatja a Log Analyticset. Az Azure Data Explorer fürtszakaszában válassza a "Napló" fület:

Képernyőkép az Azure Data Explorer monitorozási naplókhoz való betöltéséről

Hasznos lekérdezések

A séma ismertetése dinamikus séma használata esetén

| project p=treepath(fullrecord)
| mv-expand p 
| summarize by tostring(p)

Értékek elérése tömbben

| where id_string == "a"
| summarize avg(todouble(fullrecord.['nestedArray_v_double'])) by bin(timestamp, 1s)  
| render timechart 

Time Series Model (TSM) migrálása az Azure Data Explorerbe

A modell JSON formátumban letölthető a TSI-környezetből a TSI Explorer UX vagy a TSM Batch API használatával. Ezután a modell importálható egy másik rendszerbe, például az Azure Data Explorerbe.

  1. Töltse le a TSM-et a TSI UX-ből.

  2. Törölje az első három sort a VSCode vagy egy másik szerkesztő használatával.

    Képernyőkép a TSM Azure Data Explorerbe való migrálásáról – Az első 3 sor törlése

  3. A VSCode vagy más szerkesztő használatával keressen és cserélje le regexként \},\n \{ a következőre: }{

    Képernyőkép az Azure Data Explorerbe irányuló TSM-migrálásról – keresés és csere

  4. Betöltés JSON-ként az ADX-be külön táblázatként a fájlfunkciók feltöltésével.

    Képernyőkép az Azure Data Explorerbe történő TSM-migrálásról – Betöltés JSON-ként

Idősoros lekérdezések (TSQ) lefordítása KQL-be

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 szűrővel

{
  "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 előre jelzett változóval

{
  "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 szűrővel

{
  "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

Migrálás a TSI Power BI Csatlakozás orról az ADX Power BI Csatlakozás orra

A migrálás manuális lépései a következők:

  1. Power BI-lekérdezés konvertálása TSQ-ra
  2. TSQ átalakítása KQL Power BI-lekérdezéssé TSQ-vá: A TSI UX Explorerből másolt Power BI-lekérdezés az alábbi módon néz ki

Nyers adatokhoz (GetEvents API)

{"storeType":"ColdStore","isSearchSpanRelative":false,"clientDataType":"RDX_20200713_Q","environmentFqdn":"6988946f-2b5c-4f84-9921-530501fbab45.env.timeseries.azure.com", "queries":[{"getEvents":{"searchSpan":{"from":"2019-10-31T23:59:39.590Z","to":"2019-11-01T05:22:18.926Z"},"timeSeriesId":["Arctic Ocean",null],"take":250000}}]}
  • TSQ-vá alakításához hozzon létre egy JSON-t a fenti hasznos adatokból. A GetEvents API dokumentációjában példák is vannak a jobb megértéshez. Lekérdezés – Végrehajtás – REST API (Azure Time Series Elemzések) | Microsoft Docs
  • A konvertált TSQ az alább látható módon jelenik meg. Ez a JSON hasznos adata a "lekérdezésekben"
{
  "getEvents": {
    "timeSeriesId": [
      "Arctic Ocean",
      "null"
    ],
    "searchSpan": {
      "from": "2019-10-31T23:59:39.590Z",
      "to": "2019-11-01T05:22:18.926Z"
    },
    "take": 250000
  }
}

Aggradate Data (Aggregate Series API)

  • Egyetlen beágyazott változó esetén a TSI UX Explorerből származó PowerBI-lekérdezés az alábbi módon néz ki:
{"storeType":"ColdStore","isSearchSpanRelative":false,"clientDataType":"RDX_20200713_Q","environmentFqdn":"6988946f-2b5c-4f84-9921-530501fbab45.env.timeseries.azure.com", "queries":[{"aggregateSeries":{"searchSpan":{"from":"2019-10-31T23:59:39.590Z","to":"2019-11-01T05:22:18.926Z"},"timeSeriesId":["Arctic Ocean",null],"interval":"PT1M", 		"inlineVariables":{"EventCount":{"kind":"aggregate","aggregation":{"tsx":"count()"}}},"projectedVariables":["EventCount"]}}]}
{
  "aggregateSeries": {
    "timeSeriesId": [
      "Arctic Ocean",
      "null"
    ],
    "searchSpan": {
      "from": "2019-10-31T23:59:39.590Z",
      "to": "2019-11-01T05:22:18.926Z"
    },
    "interval": "PT1M",
    "inlineVariables": {
      "EventCount": {
        "kind": "aggregate",
        "aggregation": {
          "tsx": "count()"
        }
      }
    },
    "projectedVariables": [
      "EventCount",
    ]
  }
}
  • Több beágyazott változó esetén fűzze hozzá a jsont az "inlineVariables" elemhez az alábbi példában látható módon. Egynél több beágyazott változó Power BI-lekérdezése a következőképpen néz ki:
{"storeType":"ColdStore","isSearchSpanRelative":false,"clientDataType":"RDX_20200713_Q","environmentFqdn":"6988946f-2b5c-4f84-9921-530501fbab45.env.timeseries.azure.com","queries":[{"aggregateSeries":{"searchSpan":{"from":"2019-10-31T23:59:39.590Z","to":"2019-11-01T05:22:18.926Z"},"timeSeriesId":["Arctic Ocean",null],"interval":"PT1M", "inlineVariables":{"EventCount":{"kind":"aggregate","aggregation":{"tsx":"count()"}}},"projectedVariables":["EventCount"]}}, {"aggregateSeries":{"searchSpan":{"from":"2019-10-31T23:59:39.590Z","to":"2019-11-01T05:22:18.926Z"},"timeSeriesId":["Arctic Ocean",null],"interval":"PT1M", "inlineVariables":{"Magnitude":{"kind":"numeric","value":{"tsx":"$event['mag'].Double"},"aggregation":{"tsx":"max($value)"}}},"projectedVariables":["Magnitude"]}}]}

{
  "aggregateSeries": {
    "timeSeriesId": [
      "Arctic Ocean",
      "null"
    ],
    "searchSpan": {
      "from": "2019-10-31T23:59:39.590Z",
      "to": "2019-11-01T05:22:18.926Z"
    },
    "interval": "PT1M",
    "inlineVariables": {
      "EventCount": {
        "kind": "aggregate",
        "aggregation": {
          "tsx": "count()"
        }
      },
      "Magnitude": {
        "kind": "numeric",
        "value": {
          "tsx": "$event['mag'].Double"
        },
        "aggregation": {
          "tsx": "max($value)"
        }
      }
    },
    "projectedVariables": [
      "EventCount",
      "Magnitude",
    ]
  }
}
  • Ha le szeretné kérdezni a legújabb adatokat("isSearchSpanRelative": igaz), manuálisan számítsa ki a keresési adatokat az alábbiak szerint
    • Keresse meg a Power BI hasznos adatai között a "from" és a "to" közötti különbséget. Nevezzük ezt a különbséget "D"-nek, ahol a "D" = "from" - "to"
    • Vegye ki az aktuális időbélyeget("T"), és vonja ki az első lépésben kapott különbséget. Ez lesz az új "from"(F) a searchSpan ahol "F" = "T" - "D"
    • Most az új "from" az "F" a 2. lépésben, az új "to" pedig "T" (aktuális időbélyeg)