Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:✅ SQL Analytics-végpont és -raktár a Microsoft Fabricben
Ebből a cikkből megtudhatja, hogyan kérdezhet le JSON-fájlokat a Fabric SQL használatával, beleértve a Fabric Data Warehouse-t és az SQL Analytics-végpontot.
A JSON (JavaScript Object Notation) egy egyszerűsített formátum félig strukturált adatokhoz, amelyeket széles körben használnak a big data-ban érzékelőstreamekhez, IoT-konfigurációkhoz, naplókhoz és térinformatikai adatokhoz (például GeoJSON).
JSON-fájlok közvetlen lekérdezése az OPENROWSET használatával
A Fabric Data Warehouse-ban és a Lakehouse SQL Analytics-végpontjában a függvény használatával OPENROWSET közvetlenül a tóban kérdezhet le JSON-fájlokat.
OPENROWSET( BULK '{{filepath}}', [ , <options> ... ])
[ WITH ( <column schema and mappings> ) ];
Amikor JSON-fájlokat kérdez le AZ OPENROWSET használatával, először adja meg a fájl elérési útját, amely lehet közvetlen URL-cím vagy helyettesítő minta, amely egy vagy több fájlt céloz meg. Alapértelmezés szerint a Fabric a JSON-dokumentum minden legfelső szintű tulajdonságát külön oszlopként jeleníti meg az eredményhalmazban. A JSON Lines-fájlok esetében minden sor külön sorként van kezelve, így ideális a streamelési forgatókönyvekhez.
Ha további vezérlésre van szüksége:
- Az opcionális
WITHzáradék használatával explicit módon definiálhatja a sémát, és oszlopokat képezhet le adott JSON-tulajdonságokra, beleértve a beágyazott útvonalakat is. - A relatív elérési utak gyökérhelyére való hivatkozásra használható
DATA_SOURCE. - Konfigurálja a hibakezelési paramétereket, mint például
MAXERRORS, hogy elegánsan kezelje az elemzési problémákat.
Gyakori JSON-fájlhasználati esetek
A Microsoft Fabricben kezelhető gyakori JSON-fájltípusok és használati esetek:
- Vonallal tagolt JSON-fájlok ("JSON-vonalak"), ahol minden sor önálló, érvényes JSON-dokumentum (például esemény, olvasás vagy naplóbejegyzés).
- A teljes fájl nem feltétlenül egyetlen érvényes JSON-dokumentum, hanem JSON-objektumok sorozata, amelyeket újvonalas karakterek választanak el egymástól.
- Az ilyen formátumú fájloknak általában
.jsonl,.ldjsonvagy.ndjsonkiterjesztése van. Streameléshez és csak hozzáfűző forgatókönyvekhez ideális - az írók új eseményeket adhatnak hozzá új sorokként anélkül, hogy a fájlt újraírnák vagy megtörnék a struktúrát.
- Egydokumentumos JSON-fájlok ("klasszikus JSON"), amelyek kiterjesztésével
.jsona teljes fájl egy érvényes JSON-dokumentum, egyetlen objektum vagy objektumtömb (esetleg beágyazott).- Általában egy darabban exportált konfigurációkhoz, pillanatképekhez és adatkészletekhez használják.
- A GeoJSON-fájlok például általában egyetlen JSON-objektumot tárolnak, amely leírja a funkciókat és geometriáikat.
JSONL-fájlok lekérdezése OPENROWSET használatával
A Fabric Data Warehouse és a Lakehouse SQL Analytics-végpontja lehetővé teszi, hogy az SQL-fejlesztők a függvény használatával OPENROWSET közvetlenül a data lake-ből kérdezhessék le a JSON Lines-fájlokat (.jsonl, .ldjson, .ndjson).
Ezek a fájlok soronként egy érvényes JSON-objektumot tartalmaznak, így ideálisak a streameléshez és a hozzáfűzéshez.
JSON Lines-fájl olvasásához adja meg az URL-címét az BULK argumentumban:
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'
);
Alapértelmezés szerint OPENROWSET sémakövetkeztetést használ, automatikusan felderíti az egyes JSON-objektumok összes legfelső szintű tulajdonságát, és oszlopként adja vissza őket.
Azonban kifejezetten meghatározhatja a sémát, hogy szabályozza a visszaadott tulajdonságokat, és felülírja a levezetett adattípusokat.
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'
);
Az explicit sémadefiníció akkor hasznos, ha:
- Felül szeretné bírálni az alapértelmezett kikövetkeztetett típusokat (például a dátum adattípust szeretné kényszeríteni varchar helyett).
- Stabil oszlopnevekre és szelektív vetítésre van szükség.
- Az oszlopokat adott JSON-tulajdonságokhoz szeretné hozzárendelni, beleértve a beágyazott elérési utakat is.
Összetett (beágyazott) JSON-struktúrák olvasása OPENROWSET használatával
A Fabric Data Warehouse és a Lakehouse SQL Analytics-végpontja lehetővé teszi, hogy az SQL-fejlesztők közvetlenül a tóból OPENROWSETbeágyazott objektumokkal vagy alarrákkal olvassák a JSON-t.
{
"type": "Feature",
"properties": {
"shapeName": "Serbia",
"shapeISO": "SRB",
"shapeID": "94879208B25563984444888",
"shapeGroup": "SRB",
"shapeType": "ADM0"
}
}
Az alábbi példában lekérdezhet egy mintaadatokat tartalmazó fájlt, és a WITH záradék használatával explicit módon kivetítheti a levélszintű tulajdonságait:
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'
);
Megjegyzés:
Ez a példa egy adatforrás nélküli relatív elérési utat használ, amely akkor működik, ha a Lakehouse-ban lévő fájlokat az SQL Analytics-végponton keresztül kérdezi le. A Fabric Data Warehouse-ban a következőket kell tennie:
- A fájl abszolút elérési útjának használata, vagy
- Adjon meg egy gyökér URL-címet egy külső adatforrásban, és hivatkozzon rá az
OPENROWSETutasításban aDATA_SOURCEbeállítás használatával.
Beágyazott JSON-tömbök sorokká alakítása az OPENROWSET segítségével
A Fabric Data Warehouse és a Lakehouse SQL Analytics-végpontja lehetővé teszi a beágyazott tömbökkel rendelkező JSON-fájlok olvasását a használatával OPENROWSET. Ezután kibonthatja ezeket a tömböket a CROSS APPLY OPENJSON használatával. Ez a módszer akkor hasznos, ha egy legfelső szintű dokumentum elemenként egy sorként kívánt altömböt tartalmaz.
Az alábbi, egyszerűsített példabemenetben egy GeoJSON-szerű dokumentum tartalmaz egy funkciótömböt:
{
"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]]]
}
}
]
}
A következő lekérdezés:
- Beolvassa a JSON-dokumentumot a tóból
OPENROWSETa felső szintű típustulajdonság és a nyers funkciók tömbjének vetítésével. - A funkciók tömbjének kibontására alkalmazza
CROSS APPLY OPENJSON, így minden elem önálló sorba kerül az eredményben. Ebben a bővítésben a lekérdezés JSON-elérési útkifejezések használatával nyeri ki a beágyazott értékeket. Az olyan értékek, mintshapeName,shapeISO, ésgeometry, valamint a részletek, mintgeometry.typeéscoordinates, mostantól síkoszlopként jelennek meg a könnyebb elemzés érdekében.
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;