JSON biçimli örnek verileri Azure Veri Gezgini alma
Makale
Bu makalede JSON biçimli verileri Azure Veri Gezgini veritabanına nasıl alabileceğiniz gösterilmektedir. Basit ham ve eşlenmiş JSON örnekleriyle başlayacak, çok satırlı JSON'a devam edip diziler ve sözlükler içeren daha karmaşık JSON şemalarını ele alacağız. Örneklerde Kusto Sorgu Dili (KQL), C# veya Python kullanarak JSON biçimli verileri alma işlemi ayrıntılı olarak açıklanmaktadır.
Not
Üretim senaryolarında yönetim komutlarının kullanılmasını .ingest önermiyoruz. Bunun yerine bir veri bağlayıcısı kullanın veya Kusto istemci kitaplıklarından birini kullanarak program aracılığıyla veri alın.
Önkoşullar
Microsoft hesabı veya Microsoft Entra kullanıcı kimliği. Azure aboneliği gerekli değildir.
Azure Veri Gezgini iki JSON dosya biçimlerini destekler:
json: Satır ayrılmış JSON. Giriş verilerindeki her satırın tam olarak bir JSON kaydı vardır. Bu biçim açıklamaların ve tek tırnaklı özelliklerin ayrıştırılması destekler. Daha fazla bilgi için bkz. JSON Satırları.
multijson: Çok satırlı JSON. Ayrıştırıcı, satır ayırıcılarını yoksayar ve önceki konumdan geçerli bir JSON'un sonuna kadar bir kaydı okur.
Not
Alma sihirbazı kullanılarak alma işlemi yapılırken varsayılan biçim şeklindedir multijson. Biçim, çok satırlı JSON kayıtlarını ve JSON kayıtlarının dizilerini işleyebilir. Ayrıştırma hatasıyla karşılaşıldığında dosyanın tamamı atılır. Geçersiz JSON kayıtlarını yoksaymak için "Veri biçimi hatalarını yoksay" seçeneğini belirleyin. Bu seçenek biçimi json (JSON Satırları) olarak değiştirir.
JSON Çizgi biçimini ()json kullanıyorsanız, geçerli bir JSON kaydını temsil etmeyen satırlar ayrıştırma sırasında atlanır.
JSON biçimli verileri alma ve eşleme
JSON biçimli verilerin alımı, alma özelliğini kullanarak biçimi belirtmenizi gerektirir. JSON verilerinin alımı, JSON kaynak girişini hedef sütununa eşleyen eşleme gerektirir. Veri alırken özelliğini (önceden tanımlanmış eşleme için) alma özelliğiyle veya IngestionMappings özelliğiyle ingestionMappingReference kullanınIngestionMapping. Bu makalede ingestionMappingReference , alma için kullanılan tabloda önceden tanımlanmış olan alma özelliği kullanılır. Aşağıdaki örneklerde, JSON kayıtlarını ham veri olarak tek bir sütun tablosuna alarak başlayacağız. Ardından eşlemeyi kullanarak her özelliği eşlenen sütununa alacağız.
Basit JSON örneği
Aşağıdaki örnek düz yapıya sahip basit bir JSON'dır. Veriler, çeşitli cihazlar tarafından toplanan sıcaklık ve nem bilgilerine sahiptir. Her kayıt bir kimlik ve zaman damgası ile işaretlenir.
Bu örnekte, JSON kayıtlarını ham veri olarak tek bir sütun tablosuna alırsınız. Veri işleme, sorguları kullanma ve güncelleştirme ilkesi, veriler alındıktan sonra gerçekleştirilir.
Bu komut bir eşleme oluşturur ve JSON kök yolunu $ sütuna eşler Event .
Verileri tabloya RawEvents alın.
.ingest into table RawEvents ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/simple.json') with '{"format":"json", "ingestionMappingReference":"RawEventMapping"}'
Bu eşlemede, tablo şeması timestamp tarafından tanımlandığı gibi girdiler sütuna Time veri türleri olarak datetime alınacaktır.
Verileri tabloya Events alın.
.ingest into table Events ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/simple.json') with '{"format":"json", "ingestionMappingReference":"FlatEventMapping"}'
'simple.json' dosyasında birkaç satırla ayrılmış JSON kaydı var. biçimi şeklindedir jsonve alma komutunda kullanılan eşleme oluşturduğunuz komuttur FlatEventMapping .
JSON giriş verilerine benzer bir şemayla yeni bir tablo oluşturun. Bu tabloyu aşağıdaki tüm örnekler ve alma komutları için kullanacağız.
Bu eşlemede, tablo şeması timestamp tarafından tanımlandığı gibi girdiler sütuna Time veri türleri olarak datetime alınacaktır.
Verileri tabloya Events alın.
var blobPath = "https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/simple.json";
var properties = new KustoQueuedIngestionProperties(databaseName, tableName)
{
Format = DataSourceFormat.json,
IngestionMapping = new IngestionMapping { IngestionMappingReference = tableMappingName }
};
await ingestClient.IngestFromStorageAsync(blobPath, properties).ConfigureAwait(false);
'simple.json' dosyasında birkaç satırla ayrılmış JSON kaydı var. biçimi şeklindedir jsonve alma komutunda kullanılan eşleme oluşturduğunuz komuttur FlatEventMapping .
JSON giriş verilerine benzer bir şemayla yeni bir tablo oluşturun. Bu tabloyu aşağıdaki tüm örnekler ve alma komutları için kullanacağız.
'simple.json' dosyasında birkaç satır ayrılmış JSON kaydı var. biçimi şeklindedir jsonve alma komutunda kullanılan eşleme oluşturduğunuz komuttur FlatEventMapping .
Çok satırlı JSON kayıtlarını alma
Bu örnekte, çok satırlı JSON kayıtlarını alırsınız. Her JSON özelliği tablodaki tek bir sütuna eşlenir. 'multilined.json' dosyasında birkaç girintili JSON kaydı var. Biçimi multijson , kayıtlarıN JSON yapısına göre okunmasını belirtir.
.ingest into table Events ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/multilined.json') with '{"format":"multijson", "ingestionMappingReference":"FlatEventMapping"}'
Verileri tabloya Events alın.
var tableMappingName = "FlatEventMapping";
var blobPath = "https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/multilined.json";
var properties = new KustoQueuedIngestionProperties(databaseName, tableName)
{
Format = DataSourceFormat.multijson,
IngestionMapping = new IngestionMapping { IngestionMappingReference = tableMappingName }
};
await ingestClient.IngestFromStorageAsync(blobPath, properties).ConfigureAwait(false);
Dizi veri türleri, sıralı bir değer koleksiyonudur. JSON dizisinin alımı bir güncelleştirme ilkesi tarafından gerçekleştirilir. JSON, olduğu gibi bir ara tabloya alınmıştı. Güncelleştirme ilkesi tabloda önceden tanımlanmış bir işlev RawEvents çalıştırarak sonuçları hedef tabloya yeniden kaydeder. Aşağıdaki yapıya sahip verileri alacağız:
update policy koleksiyonundaki her değerin records işlecini kullanarak mv-expand ayrı bir satır alması için koleksiyonunu genişleten bir işlev oluşturun. Tabloyu kaynak tablo RawEvents ve Events hedef tablo olarak kullanacağız.
.create function EventRecordsExpand() {
RawEvents
| mv-expand records = Event.records
| project
Time = todatetime(records["timestamp"]),
Device = tostring(records["deviceId"]),
MessageId = tostring(records["messageId"]),
Temperature = todouble(records["temperature"]),
Humidity = todouble(records["humidity"])
}
İşlev tarafından alınan şema, hedef tablonun şemasıyla eşleşmelidir. Şemayı gözden geçirmek için işlecini kullanın getschema .
EventRecordsExpand() | getschema
Güncelleştirme ilkesini hedef tabloya ekleyin. Bu ilke, ara tablodaki yeni alınan veriler RawEvents üzerinde sorguyu otomatik olarak çalıştırır ve sonuçları tabloya Events alır. Ara tablonun kalıcı olmasını önlemek için sıfır bekletme ilkesi tanımlayın.
.ingest into table RawEvents ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/array.json') with '{"format":"multijson", "ingestionMappingReference":"RawEventMapping"}'
Tablodaki Events verileri gözden geçirin.
Events
koleksiyonundaki records her değerin işlecini kullanarak mv-expand ayrı bir satır alması için koleksiyonunu genişleten bir güncelleştirme işlevi oluşturun. Tabloyu kaynak tablo RawEvents ve Events hedef tablo olarak kullanacağız.
var command = CslCommandGenerator.GenerateCreateFunctionCommand(
"EventRecordsExpand",
"UpdateFunctions",
string.Empty,
null,
@"RawEvents
| mv-expand records = Event
| project
Time = todatetime(records['timestamp']),
Device = tostring(records['deviceId']),
MessageId = tostring(records['messageId']),
Temperature = todouble(records['temperature']),
Humidity = todouble(records['humidity'])",
ifNotExists: false
);
await kustoClient.ExecuteControlCommandAsync(command);
Not
İşlev tarafından alınan şema, hedef tablonun şemasıyla eşleşmelidir.
Güncelleştirme ilkesini hedef tabloya ekleyin. Bu ilke, ara tablodaki yeni alınan veriler RawEvents üzerinde sorguyu otomatik olarak çalıştırır ve sonuçlarını tabloya Events alır. Ara tablonun kalıcı olmasını önlemek için sıfır bekletme ilkesi tanımlayın.
var blobPath = "https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/array.json";
var tableName = "RawEvents";
var tableMappingName = "RawEventMapping";
var properties = new KustoQueuedIngestionProperties(databaseName, tableName)
{
Format = DataSourceFormat.multijson,
IngestionMapping = new IngestionMapping { IngestionMappingReference = tableMappingName }
};
await ingestClient.IngestFromStorageAsync(blobPath, properties);
Tablodaki Events verileri gözden geçirin.
koleksiyonundaki records her değerin işlecini kullanarak mv-expand ayrı bir satır alması için koleksiyonunu genişleten bir güncelleştirme işlevi oluşturun. Tabloyu kaynak tablo RawEvents ve Events hedef tablo olarak kullanacağız.
CREATE_FUNCTION_COMMAND =
'''.create function EventRecordsExpand() {
RawEvents
| mv-expand records = Event
| project
Time = todatetime(records["timestamp"]),
Device = tostring(records["deviceId"]),
MessageId = tostring(records["messageId"]),
Temperature = todouble(records["temperature"]),
Humidity = todouble(records["humidity"])
}'''
RESPONSE = KUSTO_CLIENT.execute_mgmt(DATABASE, CREATE_FUNCTION_COMMAND)
dataframe_from_result_table(RESPONSE.primary_results[0])
Not
İşlev tarafından alınan şemanın hedef tablonun şemasıyla eşleşmesi gerekir.
Güncelleştirme ilkesini hedef tabloya ekleyin. Bu ilke, ara tablodaki yeni alınan veriler RawEvents üzerinde sorguyu otomatik olarak çalıştırır ve sonuçlarını tabloya Events alır. Ara tablonun kalıcı olmasını önlemek için sıfır bekletme ilkesi tanımlayın.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz. https://aka.ms/ContentUserFeedback.