Query USQL per creare una tabella da Json Data

Ho un json che è come [{}, {}, {}] , cioè ci possono essere più righe e ogni riga ha un numero di coppie valore-valore, che rimangono fisse per ogni riga.

 @json = EXTRACT MainId string, Details string FROM @INPUT_FILE USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor(); 

Questo mi dà JSON come una stringa.

Non so come ottenere: row[3].property4 cose come il valore di una proprietà di una data riga. Complicando le cose le proprietà sono tutte disposte come {Name: “XXX”, Value: “YYY”}

 @jsonnodes = SELECT JsonApp.JsonFunctions.JsonTuple(@json, "event", "id") AS json_map FROM @json; 

Ora, la query sopra ho provato ma non ha funzionato.

Mi dà l’errore:

 Rowset variable '@json' is not a scalar variable. 

Come posso ottenere coppie di proprietà di riga e inserirle in un file CSV o in una tabella?

Grazie per l’aiuto.

Il JSON ha il seguente aspetto:

 [{"MainId":"24201803","System":[{"Name":"event","Value":"S"},{"Name":"id","Value":""}], "Details":[{"Name":"EventName","Value":"W"},{"Name":"previd","Value":"88"}], "ttl":8640000}, ....Multiple Rows of the Same type as before....] 

L’output che sto cercando di ottenere è:

Colonne della tabella = MainId | System.event | System.id | Details.EventName | Details.previd | TTL

I valori delle righe della tabella saranno riempiti da righe aventi i valori della proprietà corrispondente (come nelle righe json).

    Ho trovato una soluzione sotto quella che ha funzionato nel mio piccolo test case – Sono d’accordo sul fatto che la {{Name: ‘XXX’, Value: ‘YYY’} la formattazione rende le cose un po ‘complicate ma puoi ancora farlo senza un estrattore personalizzato – solo un sacco di JSON annidato.

    In sostanza, si estrae un object SQLArray dal sistema e dai dettagli JSON (in @parse_json), quindi li si divide in tuple JSON più piccole (in @get_nested) e infine si estrae i “valori” in @output. Vedi il codice qui sotto. Fammi sapere se hai domande!

     CREATE ASSEMBLY [Microsoft.Analytics.Samples.Formats] FROM @FormatsAssembly; CREATE ASSEMBLY [Newtonsoft.Json] FROM @JSONAssembly; REFERENCE ASSEMBLY [Newtonsoft.Json]; REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats]; DECLARE @CommentsPath = "/JSONTest/rawJson.json"; @get_json = EXTRACT MainId int, System string, Details string, ttl int FROM @CommentsPath USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor(); @parse_json = SELECT MainId, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(System).Values AS SystemJson, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(Details).Values AS DetailsJson, ttl FROM @get_json; @get_nested = SELECT MainId, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(SystemJson[0]) AS SystemName, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(SystemJson[1]) AS SystemId, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(DetailsJson[0]) AS DetailsName, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(DetailsJson[1]) AS DetailsPrevid, ttl FROM @parse_json; @output = SELECT MainId, SystemName["Value"] AS SystemEvent, SystemId["Value"] AS SystemId, DetailsName["Value"] AS EventName, DetailsPrevid["Value"] AS PrevId, ttl FROM @get_nested; OUTPUT @output TO @"/JSONTest/test1.csv" USING Outputters.Csv(outputHeader : true);