2017-09-18 2 views
0

J'ai une structure de message dans le format suivantComment stocker des données json dans un stockage de table azur qui devrait être ajouté à chaque ligne à partir d'une seule chaîne json?

{"deviceId":"D1","t":"2017-07-07T12:31:21Z","i1":"112.50","i2":"150.75","i3":"406.25","type":"Instant"} 

Ce que je suis en train de faire est de sauvegarder ces données dans le stockage de table d'azur dans le format suivant

enter image description here

Je peux ajouter ceci une seule ligne avec i1, i2, i3 comme colonne. Mais j'ai besoin de cela dans la structure spécifiée. La requête suivante est utilisée dans les analyses de flux pour stocker des données dans le stockage de table. Cela fonctionne. Mais j'ai besoin d'une table supplémentaire pour stocker les données comme indiqué ci-dessus.

SELECT 
deviceId, 
TRY_CAST(t AS datetime) as Row, 
i1, 
i2, 
i3, 
type 
INTO 
[iothubstorage] 
FROM 
[iotinput] timestamp by t 

Cela fonctionne. Mais j'ai besoin d'une table supplémentaire pour stocker les données comme indiqué ci-dessus. Est-ce possible?

Répondre

1

Vous pouvez utiliser UNION pour combiner les 3 lignes, l'exemple de code ci-dessous est pour votre référence. Je l'ai testé et ça a bien marché de mon côté.

With firstQueryResult AS (SELECT 
CONCAT(TRY_CAST(deviceId as nvarchar(max)) , ' - i1') as PartitionKey, 
t as RowKey, 
TRY_CAST(t AS datetime) as TimeReceived, 
CONCAT(TRY_CAST(deviceId as nvarchar(max)) , ' - i1') as deviceId, 
'i1' as Input, 
i1 as Value FROM [iotinput] 
UNION 
SELECT 
CONCAT(TRY_CAST(deviceId as nvarchar(max)) , ' - i2') as PartitionKey, 
t as RowKey, 
TRY_CAST(t AS datetime) as TimeReceived, 
CONCAT(TRY_CAST(deviceId as nvarchar(max)) , ' - i2') as deviceId, 
'i2' as Input, 
i2 as Value FROM [iotinput] 
UNION 
SELECT 
CONCAT(TRY_CAST(deviceId as nvarchar(max)) , ' - i3') as PartitionKey, 
t as RowKey, 
TRY_CAST(t AS datetime) as TimeReceived, 
CONCAT(TRY_CAST(deviceId as nvarchar(max)) , ' - i3') as deviceId, 
'i3' as Input, 
i3 as Value FROM [iotinput]) 

SELECT * INTO 
[iothubstorage] FROM firstQueryResult 
+0

J'ai essayé. Mais montrant une erreur lors de l'utilisation où la condition –

+0

Où avez-vous utilisé «où» condition? – Amor

+0

Désolé mon erreur. J'ai oublié d'ajouter une virgule dans la requête. Il fonctionne maintenant. Merci.. –