JSON Düzleştirme, Kaçış ve Dizi İşleme
Not
Time Series Insights hizmeti 7 Temmuz 2024'te kullanımdan kaldırılacaktır. Mevcut ortamları mümkün olan en kısa sürede alternatif çözümlere geçirmeyi göz önünde bulundurun. Kullanımdan kaldırma ve geçiş hakkında daha fazla bilgi için belgelerimizi ziyaret edin.
Azure Time Series Insights 2. Nesil ortamınız, belirli adlandırma kurallarını izleyerek sıcak ve soğuk mağazalarınızın sütunlarını dinamik olarak oluşturur. Bir olay alındığında, JSON yüküne ve özellik adlarına bir dizi kural uygulanır. Bunlar belirli özel karakterlerden kaçışı ve iç içe JSON nesnelerini düzleştirmeyi içerir. JSON'unuzun şeklinin olaylarınızın depolanma ve sorgulanma şeklini nasıl etkileyebileceğinden emin olmak için bu kuralları bilmeniz önemlidir. Kuralların tam listesi için aşağıdaki tabloya bakın. A ve B örnekleri, bir dizide birden çok zaman serisini verimli bir şekilde nasıl toplu işleyemediğinizi de gösterir.
Önemli
- Time Series ID özelliğini ve/veya olay kaynağı zaman damgası propert'ınızı (ies) seçmeden önce aşağıdaki kuralları gözden geçirin. TS kimliğiniz veya zaman damganız iç içe bir nesne içindeyse veya aşağıdaki özel karakterlerden birine veya daha fazlasına sahipse, sağladığınız özellik adının alma kuralları uygulandıktan sonra sütun adıyla eşleştiğinden emin olmanız önemlidir. Aşağıdaki B örneğine bakın.
Kural | Örnek JSON | Zaman Serisi İfadesi söz dizimi | Parquet'de özellik sütun adı |
---|---|---|---|
Azure Time Series Insights 2. Nesil veri türü, sütun adınızın sonuna "_<dataType>" olarak eklenir | "type": "Accumulated Heat" |
$event.type.String |
type_string |
Olay kaynağı zaman damgası özelliği Azure Time Series Insights 2. Nesil'de depolamada "zaman damgası" olarak ve UTC'de depolanan değer olarak kaydedilir. Olay kaynaklarınızı zaman damgası özelliğini çözümünüzün gereksinimlerini karşılayacak şekilde özelleştirebilirsiniz, ancak sıcak ve soğuk depolama alanındaki sütun adı "zaman damgası"dır. Olay kaynağı zaman damgası olmayan diğer datetime JSON özellikleri, yukarıdaki kuralda belirtildiği gibi sütun adında "_datetime" ile kaydedilir. | "ts": "2020-03-19 14:40:38.318" |
$event.$ts |
timestamp |
Özel karakterleri içeren JSON özellik adları. [ \ ve ', [' ve '] kullanılarak kaçılır | "id.wasp": "6A3090FD337DE6B" |
$event['id.wasp'].String |
['id.wasp']_string |
[' ve '] içinde tek tırnak işaretleri ve ters eğik çizgilerden ek kaçışlar vardır. Tek bir tırnak işareti \' olarak, ters eğik çizgi de \\ olarak yazılır | "Foo's Law Value": "17.139999389648" |
$event['Foo\'s Law Value'].Double |
['Foo\'s Law Value']_double |
İç içe JSON nesneleri ayırıcı olarak nokta ile düzleştirilmiş. 10 düzeye kadar iç içe yerleştirme desteklenir. | "series": {"value" : 316 } |
$event.series.value.Long veya $event['series']['value'].Long $event.series['value'].Long |
series.value_long |
İlkel tür dizileri Dinamik tür olarak depolanır | "values": [154, 149, 147] |
Dinamik türler yalnızca GetEvents API'sini kullanarak alınabilir | values_dynamic |
Nesne içeren dizilerin nesne içeriğine bağlı olarak iki davranışı vardır: TS kimlikleri veya zaman damgası özellikleri(ies) bir dizideki nesnelerin içindeyse, ilk JSON yükünün birden çok olay üretmesi için dizinin kaydı silinir. Bu sayede birden çok olayı tek bir JSON yapısında toplu işleyebilirsiniz. Diziyle eşlenen tüm üst düzey özellikler, kaydedilmemiş her nesneyle birlikte kaydedilir. TS kimlikleriniz ve zaman damganız dizi içinde değilse , dinamik tür olarak kaydedilir. | Aşağıdaki A, B ve C örneklerine bakın | ||
Karma öğeler içeren diziler düzleştirmez. | "values": ["foo", {"bar" : 149}, 147] |
Dinamik türler yalnızca GetEvents API'sini kullanarak alınabilir | values_dynamic |
JSON özellik adı sınırı 512 karakterdir. Ad 512 karakteri aşarsa, 512'ye yuvarlanır ve '_<'hashCode'>' eklenir. Bunun, düzleştirilmiş nesneden birleştirilmiş özellik adları için de geçerli olduğunu ve iç içe nesne yolunu ifade ettiğini unutmayın . | "data.items.datapoints.values.telemetry<...continuing to over 512 chars>" : 12.3440495 |
"$event.data.items.datapoints.values.telemetry<...continuing to include all chars>.Double" |
data.items.datapoints.values.telemetry<...continuing to 512 chars>_912ec803b2ce49e4a541068d495ab570_double |
Diziler için ikili davranışı anlama
Nesne dizileri, verilerinizi nasıl modellediğinize bağlı olarak tam olarak depolanır veya birden çok olaya bölünür. Bu, olayları toplu iş yapmak için bir dizi kullanmanıza ve kök nesne düzeyinde tanımlanan telemetri özelliklerinin yinelenmesinden kaçınmanıza olanak tanır. Toplu işlem, daha az Event Hubs veya IoT Hub iletisi gönderilmesine neden olduğundan avantajlı olabilir.
Ancak bazı durumlarda, nesneleri içeren diziler yalnızca diğer değerler bağlamında anlamlıdır. Birden çok olay oluşturmak verileri anlamsız hale getirir. Bir nesne dizisinin dinamik tür olarak olduğu gibi depolandığından emin olmak için aşağıdaki veri modelleme kılavuzunu izleyin ve Örnek C'ye bakın
Nesne dizimin birden çok olay üretip üretmediğini öğrenme
Time Series ID'nizin bir veya daha fazlası bir dizideki nesnelerin içinde iç içe yerleştirilmişse veya olay kaynağı zaman damgası özelliğiniz iç içe yerleştirilmişse, alma altyapısı bunu bölerek birden çok olay oluşturur. TS kimlikleriniz ve/veya zaman damganız için sağladığınız özellik adları yukarıdaki düzleştirme kurallarına uymalıdır ve bu nedenle JSON'unuzun şeklini gösterir. Aşağıdaki örneklere bakın ve Zaman Serisi Kimliği özelliğini seçme kılavuzuna göz atın.
Örnek A
Nesne kökünde Zaman Serisi Kimliği ve iç içe zaman damgası
Ortam Zaman Serisi Kimliği: "id"
Olay kaynağı zaman damgası: "values.time"
JSON yükü:
[
{
"id": "caaae533-1d6c-4f58-9b75-da102bcc2c8c",
"values": [
{
"time": "2020-05-01T00:59:59.000Z",
"value": 25.6073
},
{
"time": "2020-05-01T01:00:29.000Z",
"value": 43.9077
}
]
},
{
"id": "1ac87b74-0865-4a07-b512-56602a3a576f",
"values": [
{
"time": "2020-05-01T00:59:59.000Z",
"value": 0.337288
},
{
"time": "2020-05-01T01:00:29.000Z",
"value": 4.76562
}
]
}
]
Parquet dosyasının sonucu:
Yukarıdaki yapılandırma ve yük üç sütun ve dört olay oluşturur
timestamp | id_string | values.value_double |
---|---|---|
2020-05-01T00:59:59.000Z |
caaae533-1d6c-4f58-9b75-da102bcc2c8c |
25.6073 |
2020-05-01T01:00:29.000Z |
caaae533-1d6c-4f58-9b75-da102bcc2c8c |
43.9077 |
2020-05-01T00:59:59.000Z |
1ac87b74-0865-4a07-b512-56602a3a576f |
0.337288 |
2020-05-01T01:00:29.000Z |
1ac87b74-0865-4a07-b512-56602a3a576f |
4.76562 |
Örnek B
İç içe bir özelliği olan bileşik Zaman Serisi Kimliği
Ortam Zaman Serisi Kimliği: "plantId"
ve "telemetry.tagId"
Olay kaynağı zaman damgası: "timestamp"
JSON yükü:
[
{
"plantId": "9336971",
"timestamp": "2020-01-22T16:38:09Z",
"telemetry": [
{
"tagId": "100231-A-A6",
"tagValue": -31.149018
},
{
"tagId": "100231-A-A1",
"tagValue": 20.560796
},
{
"tagId": "100231-A-A9",
"tagValue": 177
},
{
"tagId": "100231-A-A8",
"tagValue": 420
},
]
},
{
"plantId": "9336971",
"timestamp": "2020-01-22T16:42:14Z",
"telemetry": [
{
"tagId": "103585-A-A7",
"value": -30.9918
},
{
"tagId": "103585-A-A4",
"value": 19.960796
}
]
}
]
Parquet dosyasının sonucu:
Yukarıdaki yapılandırma ve yük dört sütun ve altı olay oluşturur
timestamp | plantId_string | telemetry.tagId_string | telemetry.value_double |
---|---|---|---|
2020-01-22T16:38:09Z |
9336971 |
100231-A-A6 |
-31.149018 |
2020-01-22T16:38:09Z |
9336971 |
100231-A-A1 |
20.560796 |
2020-01-22T16:38:09Z |
9336971 |
100231-A-A9 |
177 |
2020-01-22T16:38:09Z |
9336971 |
100231-A-A8 |
420 |
2020-01-22T16:42:14Z |
9336971 |
100231-A-A7 |
-30.9918 |
2020-01-22T16:42:14Z |
9336971 |
100231-A-A4 |
19.960796 |
Örnek C
Zaman Serisi Kimliği ve zaman damgası nesne kökünde
Ortam Zaman Serisi Kimliği: "id"
Olay kaynağı zaman damgası: "timestamp"
JSON yükü:
{
"id": "800500054755",
"timestamp": "2020-11-01T10:00:00.000Z",
"datapoints": [{
"value": 120
},
{
"value": 124
}
]
}
Parquet dosyasının sonucu:
Yukarıdaki yapılandırma ve yük üç sütun ve bir olay oluşturur
timestamp | id_string | datapoints_dynamic |
---|---|---|
2020-11-01T10:00:00.000Z |
800500054755 |
[{"value": 120},{"value":124}] |
Sonraki adımlar
- Ortamınızın aktarım hızı sınırlamalarını anlama