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.
Si applica a:✅ endpoint di analisi SQL e magazzino dati in Microsoft Fabric
Questo articolo illustra come eseguire query su file JSON usando Fabric SQL, tra cui Fabric Data Warehouse e l'endpoint di analisi SQL.
JSON (JavaScript Object Notation) è un formato leggero per i dati semistrutturati, ampiamente usato in Big Data per flussi di sensori, configurazioni IoT, log e dati geospaziali ( ad esempio GeoJSON).
Usare OPENROWSET per eseguire query sui file JSON direttamente
In Fabric Data Warehouse e nell'endpoint di analisi SQL per un Lakehouse è possibile eseguire query sui file JSON direttamente nel lake usando la OPENROWSET funzione .
OPENROWSET( BULK '{{filepath}}', [ , <options> ... ])
[ WITH ( <column schema and mappings> ) ];
Quando si eseguono query su file JSON con OPENROWSET, si inizia specificando il percorso del file, che può essere un URL diretto o un pattern con caratteri jolly destinato a uno o più file. Per impostazione predefinita, Fabric proietta ogni proprietà di primo livello nel documento JSON come colonna separata nel set di risultati. Per i file di righe JSON, ogni riga viene considerata come una singola riga, rendendola ideale per gli scenari di streaming.
Se è necessario un maggiore controllo:
- Usare la clausola facoltativa
WITHper definire lo schema in modo esplicito ed eseguire il mapping delle colonne a proprietà JSON specifiche, inclusi i percorsi annidati. - Usare
DATA_SOURCEper fare riferimento a una posizione radice per i percorsi relativi. - Configurare i parametri di gestione degli errori, come
MAXERRORS, per gestire correttamente i problemi di analisi.
Casi d'uso comuni di file JSON
Tipi di file JSON comuni e casi d'uso che è possibile gestire in Microsoft Fabric:
- File JSON delimitati da righe ("righe JSON") in cui ogni riga è un documento JSON autonomo e valido(ad esempio, un evento, una lettura o una voce di log).
- L'intero file non è necessariamente un singolo documento JSON valido, ma è una sequenza di oggetti JSON separati da caratteri di nuova riga.
- I file con questo formato in genere hanno estensioni
.jsonl,.ldjsono.ndjson. Ideale per gli scenari di streaming e di sola accodamento, gli scrittori possono aggiungere un nuovo evento come nuova riga senza riscrivere il file o interrompere la struttura.
- File JSON a documento singolo ("JSON classico") con l'estensione
.jsonin cui l'intero file è un documento JSON valido, ovvero un singolo oggetto o una matrice di oggetti (potenzialmente annidati).- Viene comunemente usato per la configurazione, gli snapshot e i set di dati esportati in un unico pezzo.
- Ad esempio, i file GeoJSON in genere archiviano un singolo oggetto JSON che descrive le caratteristiche e le relative geometrie.
Eseguire query su file JSONL con OPENROWSET
Fabric Data Warehouse e l'endpoint di analisi SQL per Lakehouse consentono agli sviluppatori SQL di eseguire query su file JSON Lines (.jsonl, .ldjson, .ndjson) direttamente dal data lake usando la OPENROWSET funzione .
Questi file contengono un oggetto JSON valido per riga, che li rende ideali per scenari di streaming e che consentono solo accodamenti.
Per leggere un file di righe JSON, specificare il relativo URL nell'argomento BULK :
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl'
);
Per impostazione predefinita, OPENROWSET usa l'inferenza dello schema, individuando automaticamente tutte le proprietà di primo livello in ogni oggetto JSON e restituendole come colonne.
È tuttavia possibile definire in modo esplicito lo schema per controllare quali proprietà vengono restituite ed eseguire l'override dei tipi di dati dedotti:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl'
) WITH (
country_region VARCHAR(100),
confirmed INT,
date_reported DATE '$.updated'
);
La definizione esplicita dello schema è utile quando:
- Si vuole eseguire l'override dei tipi derivati predefiniti, ad esempio per forzare il tipo di dati date anziché varchar.
- Sono necessari nomi di colonna stabili e proiezione selettiva.
- Si vuole eseguire il mapping delle colonne a proprietà JSON specifiche, inclusi i percorsi annidati.
Leggere strutture JSON complesse (annidate) con OPENROWSET
Fabric Data Warehouse e l'endpoint di analisi SQL per Lakehouse consentono agli sviluppatori SQL di leggere JSON con oggetti o sottoarray annidati direttamente dal lake usando OPENROWSET.
{
"type": "Feature",
"properties": {
"shapeName": "Serbia",
"shapeISO": "SRB",
"shapeID": "94879208B25563984444888",
"shapeGroup": "SRB",
"shapeType": "ADM0"
}
}
Nell'esempio seguente eseguire una query su un file contenente dati di esempio e usare la WITH clausola per proiettare in modo esplicito le proprietà a livello foglia:
SELECT
*
FROM
OPENROWSET(
BULK '/Files/parquet/nested/geojson.jsonl'
)
WITH (
-- Top-level field
[type] VARCHAR(50),
-- Leaf properties from the nested "properties" object
shapeName VARCHAR(200) '$.properties.shapeName',
shapeISO VARCHAR(50) '$.properties.shapeISO',
shapeID VARCHAR(200) '$.properties.shapeID',
shapeGroup VARCHAR(50) '$.properties.shapeGroup',
shapeType VARCHAR(50) '$.properties.shapeType'
);
Annotazioni
Questo esempio usa un percorso relativo senza un'origine dati, che funziona durante l'esecuzione di query sui file in Lakehouse tramite l'endpoint di analisi SQL. In Fabric Data Warehouse è necessario:
- Usare un percorso assoluto del file o
- Specificare un URL radice in un'origine dati esterna e farvi riferimento nell'istruzione
OPENROWSETusando l'opzioneDATA_SOURCE.
Espandere matrici annidate (DA JSON a righe) con OPENROWSET
Fabric Data Warehouse e l'endpoint di analisi SQL per Lakehouse consentono di leggere i file JSON con matrici annidate usando OPENROWSET. È quindi possibile espandere (annullare) tali matrici usando CROSS APPLY OPENJSON. Questo metodo è utile quando un documento di primo livello contiene un sottoarray che desideri come una riga per elemento.
Nell'input di esempio semplificato seguente, un documento simile a GeoJSON ha una matrice di funzionalità:
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{
"type": "Feature",
"properties": {
"shapeName": "Serbia",
"shapeISO": "SRB",
"shapeID": "94879208B25563984444888",
"shapeGroup": "SRB",
"shapeType": "ADM0"
},
"geometry": {
"type": "Line",
"coordinates": [[[19.6679328, 46.1848744], [19.6649294, 46.1870428], [19.6638492, 46.1890231]]]
}
}
]
}
La query seguente:
- Legge il documento JSON dal lake usando
OPENROWSET, proiettando la proprietà di tipo di primo livello insieme alla matrice di funzionalità non elaborate. - Si applica
CROSS APPLY OPENJSONper espandere la matrice di funzionalità in modo che ogni elemento diventi la propria riga nel set di risultati. All'interno di questa espansione, la query estrae i valori annidati usando espressioni di percorso JSON. I valori comeshapeName,shapeISOegeometry, dettagli comegeometry.typeecoordinates, sono ora colonne piatte per un'analisi più semplice.
SELECT
r.crs_name,
f.[type] AS feature_type,
f.shapeName,
f.shapeISO,
f.shapeID,
f.shapeGroup,
f.shapeType,
f.geometry_type,
f.coordinates
FROM
OPENROWSET(
BULK '/Files/parquet/nested/geojson.jsonl'
)
WITH (
crs_name VARCHAR(100) '$.crs.properties.name', -- top-level nested property
features VARCHAR(MAX) '$.features' -- raw JSON array
) AS r
CROSS APPLY OPENJSON(r.features)
WITH (
[type] VARCHAR(50),
shapeName VARCHAR(200) '$.properties.shapeName',
shapeISO VARCHAR(50) '$.properties.shapeISO',
shapeID VARCHAR(200) '$.properties.shapeID',
shapeGroup VARCHAR(50) '$.properties.shapeGroup',
shapeType VARCHAR(50) '$.properties.shapeType',
geometry_type VARCHAR(50) '$.geometry.type',
coordinates VARCHAR(MAX) '$.geometry.coordinates'
) AS f;