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 geçecek ve ardından dizileri ve sözlükleri 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 gerekmez.
Azure Veri Gezgini iki JSON dosya biçimi destekler:
json: Satırla 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 olan bir kaydı okur.
Not
Veri alma deneyimi kullanılarak alma işlemi yapılırken varsayılan biçim olurmultijson. Biçimi, ç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, biçimi (JSON Satırları) olarak değiştirecek json olan "Veri biçimi hatalarını yoksay" seçeneğini belirleyin.
JSON Çizgi biçimini ()json kullanıyorsanız, ayrıştırma sırasında geçerli bir JSON kaydını temsil etmeyen satırlar 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 bir 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 ve güncelleştirme ilkesi kullanılarak 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ı tarafından tanımlandığı gibi, timestamp girdiler sütuna Time veri türleri olarak datetime alını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, jsonalma komutunda kullanılan eşleme ise oluşturduğunuz biçimdir FlatEventMapping .
JSON giriş verilerine benzer bir şemayla yeni bir tablo oluşturun. Aşağıdaki tüm örnekler ve alma komutları için bu tabloyu kullanacağız.
Bu eşlemede, tablo şeması tarafından tanımlandığı gibi, timestamp girdiler sütuna Time veri türleri olarak datetime alını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, jsonalma komutunda kullanılan eşleme ise oluşturduğunuz biçimdir FlatEventMapping .
JSON giriş verilerine benzer bir şemayla yeni bir tablo oluşturun. Aşağıdaki tüm örnekler ve alma komutları için bu tabloyu kullanacağız.
'simple.json' dosyasında birkaç satır ayrılmış JSON kaydı var. biçimi, jsonalma komutunda kullanılan eşleme ise oluşturduğunuz biçimdir 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 , JSON yapısına göre kayıtların 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 yapılır. JSON bir ara tabloya olduğu gibi alınır. 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 koleksiyondaki records her değerin 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
koleksiyondaki 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.
koleksiyondaki 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.