Migrace time series Přehledy (TSI) Gen2 do Azure Data Exploreru
Poznámka:
Služba Time Series Přehledy (TSI) už nebude podporována po březnu 2025. Zvažte migraci stávajících prostředí TSI na alternativní řešení co nejdříve. Další informace o vyřazení a migraci najdete v naší dokumentaci.
Přehled
Doporučení pro migraci na vysoké úrovni
Funkce | Stav Gen2 | Doporučená migrace |
---|---|---|
Ingestování JSON z centra s plochou a zapouzdřením | Příjem dat TSI | ADX – OneClick Ingestování / Průvodce |
Otevřít studené úložiště | Účet úložiště zákazníka | Průběžný export dat do externí tabulky zadané zákazníkem v ADLS |
Připojení or PBI | Privátní verze Preview | Použijte Připojení or pobočkové ústředny ADX. Přepište TSQ na KQL ručně. |
Konektor Spark | Privátní verze Preview: Dotazování telemetrických dat Dotazování na data modelu | Migrace dat do ADX Použijte konektor ADX Spark pro telemetrická data a model exportu do FORMÁTU JSON a načtěte ho ve Sparku. Přepište dotazy v KQL. |
Hromadné nahrávání | Privátní verze Preview | Používejte ADX OneClick Ingest a LightIngest. Volitelně můžete nastavit dělení v rámci ADX. |
Model služby Time Series | Dá se exportovat jako soubor JSON. Lze importovat do ADX, aby bylo možné provádět spojení v KQL. | |
Průzkumník TSI | Přepínání teplé a studené | Řídicí panely ADX |
Dotazovací jazyk | Dotazy časových řad (TSQ) | Přepište dotazy v KQL. Místo sad SDK kusto použijte sady SDK. |
Migrace telemetrie
Pomocí PT=Time
složky v účtu úložiště načtěte kopii všech telemetrických dat v prostředí. Další informace najdete v tématu Úložiště dat.
Migrace – krok 1 – získání statistik o telemetrických datech
Data
- 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)
- Přehled env –> Konfigurace úložiště –> Účet úložiště
- 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 Pro zákazníky v privátní verzi Preview hromadného importu také velikost záznamuPT=Import
a počet objektů blob.
- Velikost záznamu a počet objektů
Krok 2 migrace – Migrace telemetrie do ADX
Vytvoření clusteru ADX
Pomocí nástroje pro odhad nákladů ADX definujte velikost clusteru na základě velikosti dat.
- Z metrik služby Event Hubs (nebo IoT Hub) načtěte míru, kolik dat se ingestuje za den. Z účtu úložiště připojeného k prostředí TSI načtěte, kolik dat v kontejneru objektů blob používá TSI. Tyto informace se použijí k výpočtu ideální velikosti clusteru ADX pro vaše prostředí.
- Otevřete Nástroj pro odhad nákladů v Azure Data Exploreru a vyplňte existující pole nalezenými informacemi. Nastavte "Typ úlohy" jako "Optimalizováno pro úložiště" a "Horká data" s celkovým objemem dat aktivně dotazovaných.
- Jakmile poskytnete všechny informace, azure Data Explorer Cost Estimator navrhne velikost virtuálního počítače a počet instancí pro váš cluster. Analyzujte, jestli se velikost aktivně dotazovaných dat vejde do horké mezipaměti. Vynásobte počet instancí navrhovaných velikostí mezipaměti velikosti virtuálního počítače podle příkladu:
- Návrh odhadu nákladů: 9x DS14 + 4 TB (mezipaměť)
- Celková doporučená horká mezipaměť: 36 TB = [9x (instance) x 4 TB (horká mezipaměť na uzel)]
- Další faktory, které je potřeba vzít v úvahu:
- Růst prostředí: Při plánování velikosti clusteru ADX zvažte růst dat v čase.
- Hydrace a dělení: Při definování počtu instancí v clusteru ADX zvažte další uzly (o 2 až 3x), které urychlují hydraci a dělení.
- Další informace o výběru výpočetních prostředků najdete v tématu Výběr správné skladové položky výpočetních prostředků pro cluster Azure Data Exploreru.
Pokud chcete co nejlépe monitorovat cluster a příjem dat, měli byste povolit diagnostické Nastavení a odesílat data do pracovního prostoru služby Log Analytics.
V okně Azure Data Exploreru přejděte na Monitorování | Nastavení diagnostiky a kliknutí na Přidat nastavení diagnostiky
Vyplňte následující:
- Název nastavení diagnostiky: Zobrazovaný název pro tuto konfiguraci
- Protokoly: Minimálně vyberte SucceededIngestion, FailedIngestion, IngestionBatching
- Vyberte pracovní prostor služby Log Analytics, do které chcete data odeslat (pokud ho ještě nemáte, musíte ho zřídit před tímto krokem).
Dělení dat.
- U většiny datových sad stačí výchozí dělení ADX.
- Dělení dat je výhodné ve velmi konkrétní sadě scénářů a nemělo by se použít jinak:
- Zlepšení latence dotazů v sadách velkých objemů dat, kde většina dotazů filtruje sloupec řetězce s vysokou kardinalitou, např. ID časové řady.
- Při ingestování dat mimo pořadí, například když se události z minulosti mohou ingestovat dny nebo týdny po jejich generování v původu.
- Další informace najdete v zásadách dělení dat ADX.
Příprava na příjem dat
Přejděte na https://dataexplorer.azure.com.
Přejděte na kartu Data a vyberte Ingestovat z kontejneru objektů blob.
Vyberte cluster, databázi a vytvořte novou tabulku s názvem, který zvolíte pro data TSI.
Vybrat další: Zdroj
Na kartě Zdroj vyberte:
- Historická data
- "Vybrat kontejner"
- Volba účtu předplatného a úložiště pro vaše data TSI
- Volba kontejneru, který odpovídá vašemu prostředí TSI
Výběr možnosti Upřesnit nastavení
- Vzor času vytvoření: /'yyyMDDDHHmmssfff'_'
- Vzor názvu objektu blob: *.parquet
- Vyberte možnost Nečekat na dokončení příjmu dat.
V části Filtry souborů přidejte cestu ke složce.
V=1/PT=Time
Vybrat další: Schéma
Poznámka:
TSI použije při zachování sloupců v souborech Parquet některé zploštěné a uvozující. Další podrobnosti najdete na těchto odkazech: zploštěná pravidla a pravidla pro únik dat, aktualizace pravidel příjmu dat.
Pokud je schéma neznámé nebo se liší
Pokud je schéma známé nebo opravené
- Ověřte, že data vypadají správně. V případě potřeby opravte všechny typy.
- Vybrat další: Souhrn
Zkopírujte příkaz LightIngest a uložte ho někam, abyste ho mohli použít v dalším kroku.
Přijímání dat
Před ingestováním dat potřebujete nainstalovat nástroj LightIngest. Příkaz vygenerovaný nástrojem One-Click obsahuje token SAS. Nejlepší je vygenerovat nový, abyste měli kontrolu nad časem vypršení platnosti. Na portálu přejděte do kontejneru objektů blob pro prostředí TSI a vyberte sdílený přístupový token.
Poznámka:
Před zahájením velkého příjmu dat se také doporučuje vertikálně navýšit kapacitu clusteru. Například D14 nebo D32 s 8 nebo více instancemi.
Nastavte následující:
- Oprávnění: Čtení a seznam
- Platnost vypršela: Nastavte na období, které vám vyhovuje, že se migrace dat dokončí.
Vyberte možnost Generovat token SAS a adresu URL a zkopírujte adresu URL SAS objektu blob.
Přejděte na příkaz LightIngest, který jste zkopírovali dříve. Nahraďte parametr -source v příkazu touto adresou URL objektu blob SAS.
Možnost 1: Ingestování všech dat V menších prostředích můžete ingestovat všechna data jediným příkazem.
- Otevřete příkazový řádek a přejděte do adresáře, do kterého byl extrahován nástroj LightIngest. Tam vložte příkaz LightIngest a spusťte ho.
Možnost 2: Ingestování dat podle roku nebo měsíce Pokud chcete větší prostředí nebo otestovat menší datovou sadu, můžete příkaz Lightingest dále filtrovat.
Podle roku: Změna parametru -prefix
- Před:
-prefix:"V=1/PT=Time"
- Po:
-prefix:"V=1/PT=Time/Y=<Year>"
- Příklad:
-prefix:"V=1/PT=Time/Y=2021"
- Před:
Podle měsíce: Změna parametru -prefix
- Před:
-prefix:"V=1/PT=Time"
- Po:
-prefix:"V=1/PT=Time/Y=<Year>/M=<month #>"
- Příklad:
-prefix:"V=1/PT=Time/Y=2021/M=03"
- Před:
Jakmile příkaz upravíte, spusťte ho podobně jako výše. Jeden z dokončení příjmu dat (pomocí možnosti monitorování níže) upravte příkaz pro příští rok a měsíc, který chcete ingestovat.
Monitorování příjmu dat
Příkaz LightIngest obsahoval příznak -dontWait, takže samotný příkaz nebude čekat na dokončení příjmu dat. Nejlepší způsob, jak sledovat průběh, zatímco probíhá, je využít kartu "Přehledy" na portálu. Otevřete oddíl clusteru Azure Data Exploreru na portálu a přejděte na Monitorování | Přehledy'
K monitorování příjmu dat můžete použít část Příjem dat (Preview) s níže postupem sledování příjmu dat.
- Časový rozsah: Posledních 30 minut
- Podívejte se na úspěšné a podle tabulky
- Pokud máte nějaké chyby, podívejte se na selhání a podle tabulky.
Jakmile uvidíte, že se metriky pro vaši tabulku přejdou na 0, budete vědět, že příjem dat je hotový. Pokud chcete zobrazit další podrobnosti, můžete použít Log Analytics. V části clusteru Azure Data Exploreru vyberte na kartě Protokol:
Užitečné dotazy
Vysvětlení schématu při použití dynamického schématu
| project p=treepath(fullrecord)
| mv-expand p
| summarize by tostring(p)
Přístup k hodnotám v poli
| where id_string == "a"
| summarize avg(todouble(fullrecord.['nestedArray_v_double'])) by bin(timestamp, 1s)
| render timechart
Migrace modelu time series (TSM) 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 pak můžete importovat do jiného systému, jako je Azure Data Explorer.
Stáhněte si TSM z uživatelského prostředí TSI.
Odstraňte první tři řádky pomocí VSCode nebo jiného editoru.
Pomocí VSCode nebo jiného editoru vyhledejte a nahraďte výraz regex
\},\n \{
}{
Ingestování ve formátu JSON do ADX jako samostatné tabulky pomocí funkce Nahrát ze souboru
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
Migrace z Připojení oru TSI Power BI na Připojení or ADX Power BI
Ruční kroky, které jsou součástí této migrace, jsou
- Převod dotazu Power BI na TSQ
- Převod dotazu TSQ na KQL Power BI na TSQ: Dotaz Power BI zkopírovaný z Průzkumníka uživatelských rozhraní TSI vypadá takto, jak je znázorněno níže.
Pro nezpracovaná data (rozhraní API GetEvents)
{"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}}]}
- Pokud ho chcete převést na TSQ, vytvořte json z výše uvedené datové části. Dokumentace k rozhraní API GetEvents obsahuje také příklady, které vám pomůžou lépe porozumět. Dotaz – Provedení – REST API (azure Time Series Přehledy) | Microsoft Docs
- Převedený příkaz TSQ vypadá takto, jak je znázorněno níže. Jedná se o datovou část JSON uvnitř "dotazů".
{
"getEvents": {
"timeSeriesId": [
"Arctic Ocean",
"null"
],
"searchSpan": {
"from": "2019-10-31T23:59:39.590Z",
"to": "2019-11-01T05:22:18.926Z"
},
"take": 250000
}
}
Pro agregaci dat (rozhraní API agregované řady)
- U jedné vložené proměnné vypadá dotaz PowerBI z Průzkumníka uživatelských rozhraní TSI takto:
{"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"]}}]}
- Pokud ho chcete převést na TSQ, vytvořte json z výše uvedené datové části. Dokumentace k rozhraní API AggregateSeries obsahuje také příklady, které vám pomůžou lépe porozumět. Dotaz – Provedení – REST API (azure Time Series Přehledy) | Microsoft Docs
- Převedený příkaz TSQ vypadá takto, jak je znázorněno níže. Jedná se o datovou část JSON uvnitř "dotazů".
{
"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",
]
}
}
- Pro více než jednu vloženou proměnnou připojte json do "inlineVariables", jak je znázorněno v následujícím příkladu. Dotaz Power BI pro více než jednu vloženou proměnnou vypadá takto:
{"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",
]
}
}
- Pokud chcete dotazovat nejnovější data("isSearchSpanRelative": true), ručně vypočítejte searchSpan, jak je uvedeno níže.
- Najděte rozdíl mezi datovou částí Power BI a "to". Pojďme tento rozdíl volat jako "D", kde "D" = "from" - "to"
- Vezměte aktuální časové razítko ("T") a odečtěte rozdíl získaný v prvním kroku. Bude nový "from"(F) vyhledávacího pole, kde "F" = "T" - "D"
- Nyní je nový "from" získaný v kroku 2 a nový "to" je "T"(aktuální časové razítko)