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.Longveya $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