Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
✅ Flusso di eventi dell'infrastruttura di Analisi ✅ di flusso di Azure
Restituisce l'elemento della matrice in corrispondenza dell'indice specificato. Questa funzione è utile per analizzare matrici e oggetti annidati nei dati degli eventi di input in formato JSON e AVRO. Per altri esempi, vedere Analisi di dati JSON e AVRO. Se è necessario restituire tutti gli elementi annidati in una matrice, usare invece GetArrayElements .
Sintassi
GetArrayElement ( array_expression, bigint_expression )
Argomenti
array_expression
Espressione di matrice da valutare come matrice di origine. array_expression può essere una colonna di tipo Array o il risultato di un'altra chiamata di funzione.
bigint_expression
Espressione bigint da valutare come indice di matrice. Posizione ordinale nella matrice di elementi, a partire da 0.
Tipi restituiti
Il tipo restituito è determinato dal tipo di elemento matrice e può essere uno qualsiasi dei tipi supportati.
Esempi
Dati di esempio
[
{
"DeviceId" : "123",
"SensorReadings" :
{
"Temperature" : 80,
"Humidity" : 70,
"CustomSensor": [1,1,0]
}
},
{
"DeviceId" : "631",
"SensorReadings" :
{
"Temperature" : 81,
"Humidity" : 69,
"CustomSensor": [0,1,0]
}
}
]
Il set di dati di esempio precedente è una matrice di due record. Se usato come input locale in un file JSON, la matrice di primo livello viene interpretata per la generazione di righe/eventi da Analisi di flusso di Azure. Non è necessario prenderlo in considerazione nella sintassi della query.
A livello di singolo record, esistono due proprietà con tipi diversi.
DeviceId è di tipo nvarchar(max), SensorReadings è di tipo record (oggetto).
GetType può essere usato per determinare il tipo quando necessario.
SensorReadings ha tre proprietà: due sono di tipo bigint: Temperature e Humiditye CustomSensor è di tipo matrice (di bigint). Se questa matrice era più complessa (se stessa contenente record o matrici), è possibile usare una combinazione di GetArrayElements (plural) e GetRecordPropertyValue .
Interrogazioni
Questa query restituisce i campi nella radice del record (DeviceId), i campi annidati usando la notazione punto (Temperature,Humidity), inclusa una matrice (CustomSensor) e infine il primo e il secondo elemento della matrice tramite GetArrayElement (indice 0 e 1):
SELECT
i.DeviceId,
i.SensorReadings.Temperature,
i.SensorReadings.Humidity,
i.SensorReadings.CustomSensor as CustomSensorArray,
GetArrayElement(i.SensorReadings.CustomSensor,0) AS FirstCustomSensorValue,
GetArrayElement(i.SensorReadings.CustomSensor,1) AS SecondCustomSensorValue
FROM input i
Restituisce l'output seguente:
| DeviceId | Temperatura | Umidità | CustomSensorArray | FirstCustomSensorValue | SecondCustomSensorValue |
|---|---|---|---|---|---|
| 631 | 81 | 69 | 0,1,0 | 0 | 1 |
| 123 | 80 | 70 | 1,1,0 | 1 | 1 |
Usare CROSS APPLY per espandere la matrice:
SELECT
i.DeviceId,
CustomerSensorValue.ArrayValue AS CustomerSensorValue
FROM input AS i
CROSS APPLY GetArrayElements(i.SensorReadings.CustomSensor) AS CustomerSensorValue
Restituisce l'output seguente:
| DeviceId | CustomerSensorValue |
|---|---|
| 631 | 0 |
| 631 | 1 |
| 631 | 0 |
| 123 | 0 |
| 123 | 1 |
| 123 | 1 |
Da qui è possibile aggregare facilmente il contenuto, se necessario:
SELECT
i.DeviceId,
SUM(CustomerSensorValue.ArrayValue) AS CustomerSensorTotal
FROM input AS i
CROSS APPLY GetArrayElements(i.SensorReadings.CustomSensor) AS CustomerSensorValue
GROUP BY i.DeviceId, TumblingWindow(minute, 1)
| DeviceId | CustomerSensorTotal |
|---|---|
| 123 | 2 |
| 631 | 1 |