Time Series Insights Gen2를 Microsoft Fabric의 Real-Time Intelligence로 마이그레이션
메모
Time Series Insights 서비스는 2024년 7월 7일에 사용 중지됩니다. 가능한 한 빨리 기존 환경을 대체 솔루션으로 마이그레이션하는 것이 좋습니다. 사용 중단 및 마이그레이션에 대한 자세한 내용은
개요
Eventhouse Real-Time Intelligence의 시계열 데이터베이스입니다. Time Series Insights에서 데이터를 마이그레이션하기 위한 대상으로 사용됩니다.
마이그레이션에 대한 고급 권장 사항입니다.
특징 | 마이그레이션 권장 |
---|---|
평면화 및 이스케이프를 사용하여 허브에서 JSON 수집 | Azure Event Hubs 데이터 가져오기 |
콜드 스토어 열기 | Eventhouse OneLake 가용성 |
Power BI 커넥터 | Eventhouse Power BI Connector를 사용하세요. TSQ를 KQL로 수동으로 다시 작성합니다. |
Spark 커넥터 | Eventhouse로 데이터를 마이그레이션합니다. Apache Spark와 함께 Notebook을 사용하여 Eventhouse 쿼리하거나 Notebook 사용하여 레이크하우스의 데이터 탐색 |
대량 업로드 | Azure 스토리지에서 데이터 가져오기 |
시계열 모델 | JSON 파일로 내보낼 수 있습니다. 이벤트하우스로 가져올 수 있습니다. Kusto Graph 의미 체계는 모델, 트래버스 및 시계열 모델 계층 구조를 그래프로 분석할 수 있습니다. |
시계열 탐색기 | Real-Time 대시보드, Power BI 보고서 또는 KustoTrender를 사용하여 사용자 지정 대시보드 작성 |
쿼리 언어 | KQL에서 쿼리를 다시 작성합니다. |
원격 분석 마이그레이션
환경에서 모든 데이터의 복사본을 검색하려면 스토리지 계정의 PT=Time
폴더를 사용합니다. 자세한 내용은 Data Storage참조하세요.
마이그레이션 1단계 - 원격 분석 데이터에 대한 통계 가져오기
데이터
- Env 개요
- 데이터 액세스 FQDN의 첫 번째 부분에서 환경 ID 기록(예: .env.crystal-dev.windows-int.net 에서 d390b0b0-1445-4c0c-8365-68d6382c1c2a)
- 환경 개요 -> Storage 구성 -> Storage 계정
- Storage Explorer를 사용하여 폴더 통계 가져오기
- 레코드 크기 및
PT=Time
폴더의 Blob의 수.
- 레코드 크기 및
마이그레이션 2단계 - Eventhouse로 데이터 마이그레이션
Eventhouse 만들기
마이그레이션 프로세스를 위한 Eventhouse를 설정하려면 에서 설명된 Eventhouse구성을 위한 단계를 따릅니다.
데이터 수집
Time Series Insights 인스턴스에 해당하는 스토리지 계정에 대한 데이터를 검색하려면 Azure Storage데이터를 가져오는
다음을 확인하십시오.
파일 필터의 폴더 경로를
V=1/PT=Time
으로 설정하여 관련 블롭을 필터링합니다.적어도 타임스탬프, TSID 열 및 값을 유지하면서 유추된 스키마를 확인하고 자주 쿼리되지 않는 열을 제거합니다. 모든 데이터가 Eventhouse에 복사되도록 하려면 다른 열을 추가하고 DropMappedFields 매핑 변환을 사용합니다.
수집 프로세스를 완료합니다.
데이터 쿼리
데이터를 성공적으로 수집했으므로 KQL 쿼리 세트사용하여 탐색을 시작할 수 있습니다. 사용자 지정 클라이언트 애플리케이션에서 데이터에 액세스해야 하는 경우 Eventhouse는 C#(링크), Java(링크) 및 Node.js(링크)와 같은 주요 프로그래밍 언어에 대한 SDK를 제공합니다.
시계열 모델을 Azure Data Explorer로 마이그레이션
TSI Explorer UX 또는 TSM Batch API를 사용하여 TSI 환경에서 JSON 형식으로 모델을 다운로드할 수 있습니다. 그런 다음, 모델을 Eventhouse로 가져올 수 있습니다.
TSI UX에서 TSM을 다운로드합니다.
Visual Studio Code 또는 다른 편집기를 사용하여 처음 세 줄을 삭제합니다.
Visual Studio Code 또는 다른 편집기를 사용하여 정규 표현식으로
\},\n \{
을 검색하고}{
로 바꾸세요.단일 파일에서 데이터를 가져온 후
를 사용하여 JSON으로 ADX의 별도 테이블로 수집합니다.
시계열 데이터를 Fabric Real-Time Intelligence의 Eventhouse로 마이그레이션한 후에는 Kusto Graph 의미 체계 사용하여 데이터를 컨텍스트화하고 분석할 수 있습니다. Kusto Graph 의미 체계를 사용하면 시계열 모델의 계층 구조를 그래프로 모델링, 트래버스 및 분석할 수 있습니다. Kusto Graph 의미 체계를 사용하면 자산, 사이트 및 데이터 요소와 같은 시계열 데이터의 여러 엔터티 간의 관계에 대한 인사이트를 얻을 수 있습니다. 이러한 인사이트는 시스템의 다양한 구성 요소 간의 종속성 및 상호 작용을 이해하는 데 도움이 됩니다.
TSQ(시계열 쿼리)를 KQL로 변환
이벤트 가져오기
{
"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
{
"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
{
"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
{
"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
Time Series Insights를 기반으로 한 Power BI 보고서를 마이그레이션하는 자동화된 프로세스는 없습니다. Time Series Insights에 저장된 데이터를 사용하는 모든 쿼리를 Eventhouse로 마이그레이션해야 합니다.
Power BI에서 효율적인 시계열 보고서를 만들려면 다음 정보 블로그 문서를 참조하는 것이 좋습니다.
- Power BI에서 Eventhouse 시계열 기능
- 대부분의 제한 없이 M 동적 매개 변수를 사용하는 방법
- KQL, Power Query 및 Power BI에서의 시간 범위/기간 값
- KQL 쿼리 설정 Power BI에서
- 현지 시간 Kusto 데이터 필터링 및 시각화
- PBI + Kusto에서 근 실시간 보고서
- ADX를 사용하여 Power BI 모델링 - 치트 시트
Power BI에서 효과적인 시계열 보고서를 만드는 방법에 대한 지침은 이러한 리소스를 참조하세요.
Real-Time 대시보드
패브릭의 Real-Time 대시보드는 각 타일에 기본 쿼리와 시각적 표현이 있는, 옵션으로 페이지에 구성될 수 있는 타일의 모음입니다. 기본적으로 KQL(Kusto Query Language) 쿼리를 시각적 개체로 대시보드로 내보내고 나중에 필요에 따라 기본 쿼리 및 시각적 서식을 수정할 수 있습니다. 이 완전히 통합된 대시보드 환경은 데이터 탐색의 용이성 외에도 향상된 쿼리 및 시각화 성능을 제공합니다.
먼저 Fabric Real-Time Intelligence에서 새 대시보드를 만듭니다. 이 강력한 기능을 사용하면 데이터를 탐색하고, 시각적 개체를 사용자 지정하고, 조건부 서식을 적용하고, 매개 변수를 활용할 수 있습니다. 또한 Real-Time 대시보드에서 직접 경고를 만들어 모니터링 기능을 향상시킬 수 있습니다. 대시보드를 만드는 방법에 대한 자세한 지침은 공식 설명서참조하세요.