Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Stream Analytics hizmeti CSV, JSON ve Avro veri biçimlerinde olayları işlemeyi destekler. Hem JSON hem de Avro verileri yapılandırılabilir ve iç içe nesneler (kayıtlar) ve diziler gibi bazı karmaşık türleri içerebilir.
Veri türlerini kaydetme
Kayıt veri türleri, giriş veri akışlarında karşılık gelen biçimler kullanıldığında JSON ve Avro dizilerini temsil etmek için kullanılır. Bu örneklerde giriş olaylarını JSON biçiminde okuyan bir örnek algılayıcı gösterilmektedir. Tek bir olay örneği aşağıda verilmişti:
{
"DeviceId" : "12345",
"Location" :
{
"Lat": 47,
"Long": 122
},
"SensorReadings" :
{
"Temperature" : 80,
"Humidity" : 70,
"CustomSensor01" : 5,
"CustomSensor02" : 99,
"SensorMetadata" :
{
"Manufacturer":"ABC",
"Version":"1.2.45"
}
}
}
Bilinen şemada iç içe yerleştirilmiş alanlara erişme
İç içe yerleştirilmiş alanlara doğrudan sorgunuzdan erişmek için noktalı gösterimi (.) kullanın. Örneğin, bu sorgu önceki JSON verilerinde Location özelliğinin altındaki Enlem ve Boylam koordinatlarını seçer. Aşağıdaki kod parçacığında gösterildiği gibi birden çok düzeyde gezinmek için nokta gösterimini kullanın:
SELECT
DeviceID,
Location.Lat,
Location.Long,
SensorReadings.Temperature,
SensorReadings.SensorMetadata.Version
FROM input
Sonuç:
|DeviceID|Lat|Long|Temperature|Version|
|-|-|-|-|-|
|12345|47|122|80|1.2.45|
Tüm özellikleri seçme
Joker karakteri kullanarak * iç içe bir kaydın tüm özelliklerini seçebilirsiniz. Aşağıdaki örneği inceleyin:
SELECT
DeviceID,
Location.*
FROM input
Sonuç:
|DeviceID|Lat|Long|
|-|-|-|
|12345|47|122|
Özellik adı bir değişken olduğunda iç içe yerleştirilmiş alanlara erişme
Özellik adı bir değişkense GetRecordPropertyValue işlevini kullanın. Bu işlev, özellik adlarını sabit kodlamadan dinamik sorgular oluşturmanıza yardımcı olur.
Örneğin, örnek veri akışının her cihaz algılayıcısı için eşikler içeren başvuru verileriyle birleştirilmesi gerektiğini düşünün. Bu tür başvuru verilerinin bir parçacığı aşağıdaki örnekte gösterilmiştir.
{
"DeviceId" : "12345",
"SensorName" : "Temperature",
"Value" : 85
},
{
"DeviceId" : "12345",
"SensorName" : "Humidity",
"Value" : 65
}
Amaç, makalenin başlangıcındaki örnek veri kümesini referans verilerine birleştirmek ve eşik değerini aşan her sensör ölçümü için bir olay üretmektir. Bu birleşim, birden çok algılayıcı kendi eşiklerinin üzerindeyse tek olayın birden çok çıkış olayı oluşturabileceği anlamına gelir. Birleştirme olmadan benzer sonuçlar elde etmek için aşağıdaki örneğe bakın:
SELECT
input.DeviceID,
thresholds.SensorName,
"Alert: Sensor above threshold" AS AlertMessage
FROM input -- stream input
JOIN thresholds -- reference data input
ON
input.DeviceId = thresholds.DeviceId
WHERE
GetRecordPropertyValue(input.SensorReadings, thresholds.SensorName) > thresholds.Value
GetRecordPropertyValue, SensorReadings içinde, başvuru verilerinden gelen özellik adıyla eşleşen özelliği seçer. Ardından SensorReadings'ten ilişkili değeri ayıklar.
Sonuç:
|DeviceID|SensorName|AlertMessage|
| - | - | - |
| 12345 | Humidity | Alert: Sensor above threshold |
Kayıt alanlarını ayrı olaylara dönüştürme
Kayıt alanlarını ayrı olaylara dönüştürmek için APPLY işlecini GetRecordProperties işleviyle birlikte kullanın.
Özgün örnek verileri kullanarak, özellikleri farklı olaylara ayıklamak için aşağıdaki sorguyu kullanabilirsiniz:
SELECT
event.DeviceID,
sensorReading.PropertyName,
sensorReading.PropertyValue
FROM input as event
CROSS APPLY GetRecordProperties(event.SensorReadings) AS sensorReading
Sonuç:
|DeviceID|SensorName|AlertMessage|
|-|-|-|
|12345|Temperature|80|
|12345|Humidity|70|
|12345|CustomSensor01|5|
|12345|CustomSensor02|99|
|12345|SensorMetadata|[object Object]|
WITH kullanarak bu olayları farklı hedeflere yönlendirebilirsiniz:
WITH Stage0 AS
(
SELECT
event.DeviceID,
sensorReading.PropertyName,
sensorReading.PropertyValue
FROM input as event
CROSS APPLY GetRecordProperties(event.SensorReadings) AS sensorReading
)
SELECT DeviceID, PropertyValue AS Temperature INTO TemperatureOutput FROM Stage0 WHERE PropertyName = 'Temperature'
SELECT DeviceID, PropertyValue AS Humidity INTO HumidityOutput FROM Stage0 WHERE PropertyName = 'Humidity'
SQL başvuru verilerinde JSON kaydını ayrıştırma
İşinizde başvuru verileri olarak Azure SQL Database kullandığınızda, JSON biçiminde veri içeren bir sütun ekleyebilirsiniz. Aşağıdaki örnekte bu biçim gösterilmektedir:
|DeviceID|Data|
|-|-|
|12345|{"key": "value1"}|
|54321|{"key": "value2"}|
Basit bir JavaScript kullanıcı tanımlı işlevi yazarak Veri sütunundaki JSON kaydını ayrıştırabilirsiniz.
function parseJson(string) {
return JSON.parse(string);
}
JSON kayıtlarınızın alanlarına erişmek için, aşağıdaki örnekte gösterildiği gibi Stream Analytics sorgunuzda bir adım oluşturun.
WITH parseJson as
(
SELECT DeviceID, udf.parseJson(sqlRefInput.Data) as metadata,
FROM sqlRefInput
)
SELECT metadata.key
INTO output
FROM streamInput
JOIN parseJson
ON streamInput.DeviceID = parseJson.DeviceID
Dizi veri türleri
Dizi veri türleri sıralı bir değer koleksiyonudur. Bu bölümde dizi değerleriyle ilgili bazı tipik işlemler ayrıntılı olarak açıklanmıştır. Bu örneklerde GetArrayElement, GetArrayElements, GetArrayLength ve APPLY işleci işlevleri kullanılır.
Burada bir olay örneği verilmiş. Hem CustomSensor03 hem de SensorMetadatadizi türündedir.
{
"DeviceId" : "12345",
"SensorReadings" :
{
"Temperature" : 80,
"Humidity" : 70,
"CustomSensor01" : 5,
"CustomSensor02" : 99,
"CustomSensor03": [12,-5,0]
},
"SensorMetadata":[
{
"smKey":"Manufacturer",
"smValue":"ABC"
},
{
"smKey":"Version",
"smValue":"1.2.45"
}
]
}
Belirli bir dizi öğesiyle çalışma
Belirtilen bir dizindeki dizi öğesini seçin (ilk dizi öğesini seçin):
SELECT
GetArrayElement(SensorReadings.CustomSensor03, 0) AS firstElement
FROM input
Sonuç:
|firstElement|
|-|
|12|
Dizi uzunluğunu seçin
SELECT
GetArrayLength(SensorReadings.CustomSensor03) AS arrayLength
FROM input
Sonuç:
|arrayLength|
|-|
|3|
Dizi öğelerini ayrı olaylara dönüştürme
Tüm dizi öğelerini ayrı ayrı olaylar olarak seçin. APPLY işleci getArrayElements yerleşik işleviyle birlikte tüm dizi öğelerini tek tek olaylar olarak ayıklar:
SELECT
DeviceId,
CustomSensor03Record.ArrayIndex,
CustomSensor03Record.ArrayValue
FROM input
CROSS APPLY GetArrayElements(SensorReadings.CustomSensor03) AS CustomSensor03Record
Sonuç:
|DeviceId|ArrayIndex|ArrayValue|
|-|-|-|
|12345|0|12|
|12345|1|-5|
|12345|2|0|
SELECT
i.DeviceId,
SensorMetadataRecords.ArrayValue.smKey as smKey,
SensorMetadataRecords.ArrayValue.smValue as smValue
FROM input i
CROSS APPLY GetArrayElements(SensorMetadata) AS SensorMetadataRecords
Sonuç:
|DeviceId|smKey|smValue|
|-|-|-|
|12345|Manufacturer|ABC|
|12345|Version|1.2.45|
Veri kümesini ayıklanan alanları sütunlarda görüntülemek için JOIN işlemiyle birlikte WITH söz dizimini kullanarak çevirebilirsiniz. Bu birleştirme, yinelemeyi engelleyen bir zaman sınırı koşulu gerektirir:
WITH DynamicCTE AS (
SELECT
i.DeviceId,
SensorMetadataRecords.ArrayValue.smKey as smKey,
SensorMetadataRecords.ArrayValue.smValue as smValue
FROM input i
CROSS APPLY GetArrayElements(SensorMetadata) AS SensorMetadataRecords
)
SELECT
i.DeviceId,
i.Location.*,
V.smValue AS 'smVersion',
M.smValue AS 'smManufacturer'
FROM input i
LEFT JOIN DynamicCTE V ON V.smKey = 'Version' and V.DeviceId = i.DeviceId AND DATEDIFF(minute,i,V) BETWEEN 0 AND 0
LEFT JOIN DynamicCTE M ON M.smKey = 'Manufacturer' and M.DeviceId = i.DeviceId AND DATEDIFF(minute,i,M) BETWEEN 0 AND 0
Sonuç:
|DeviceId|Lat|Long|smVersion|smManufacturer|
|-|-|-|-|-|
|12345|47|122|1.2.45|ABC|