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.
Tip
Microsoft Fabric Data Warehouse egy nagyvállalati szintű relációs raktár egy Data Lake-alaprendszeren, jövőre kész architektúrával, beépített AI-vel és új funkciókkal. Ha még nem ismerkedik adattárházzal, kezdje a Fabric Data Warehouse. A meglévő dedikált SQL-készlet számítási feladatai frissíthetők Fabric az adatelemzés, a valós idejű elemzés és a jelentéskészítés új képességeinek eléréséhez.
Ebben a cikkben megtudhatja, hogyan írhat lekérdezést kiszolgáló nélküli SQL-készlet használatával Azure Synapse Analytics. A lekérdezés célja JSON-fájlok olvasása AZ OPENROWSET használatával.
- Standard JSON-fájlok, amelyekben több JSON-dokumentum is JSON-tömbként van tárolva.
- Vonallal tagolt JSON-fájlok, amelyekben a JSON-dokumentumok új sor karakterrel vannak elválasztva. Az ilyen típusú fájlok gyakori bővítményei a következők
jsonl: ésldjsonndjson.
JSON-dokumentumok olvasása
A JSON-fájl tartalmát a legegyszerűbben úgy tekintheti meg, ha megadja a fájl URL-címét a OPENROWSET függvénynek, megadja a csv FORMAT, és beállítja az értékeket a 0x0b és fieldterminator számára fieldquote. Ha sorhatárolt JSON-fájlokat kell olvasnia, akkor ez elegendő. Ha klasszikus JSON-fájllal rendelkezik, akkor be kell állítania az értékeket 0x0b a következőhöz rowterminator: .
OPENROWSET függvény elemzi a JSON-t, és a következő formátumban adja vissza az összes dokumentumot:
| dokumentáció |
|---|
| {"date_rep":"2020-07-24","day":24,"month":7,"year":2020,"cases":3,"deaths":0,"geo_id":"AF"} |
| {"date_rep":"2020-07-25","nap":25,"hónap":7,"év":2020,"esetek":7,"halálesetek":0,"geo_id":"AF"} |
| {"date_rep":"2020-07-26","day":26,"month":7,"year":2020,"cases":4,"deaths":0,"geo_id":"AF"} |
| {"date_rep":"2020-07-27","day":27,"month":7,"year":2020,"cases":8,"deaths":0,"geo_id":"AF"} |
Ha a fájl nyilvánosan elérhető, vagy ha a Microsoft Entra identitása hozzáfér ehhez a fájlhoz, akkor a következő példákhoz hasonló lekérdezéssel kell látnia a fájl tartalmát.
JSON-fájlok olvasása
Az alábbi minta lekérdezés beolvassa a JSON- és sorhatárolt JSON-fájlokat, és minden dokumentumot külön sorként ad vissza.
select top 10 *
from openrowset(
bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.jsonl',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b'
) with (doc nvarchar(max)) as rows
go
select top 10 *
from openrowset(
bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.json',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b',
rowterminator = '0x0b' --> You need to override rowterminator to read classic JSON
) with (doc nvarchar(max)) as rows
Az előző minta lekérdezés JSON-dokumentuma objektumtömböt tartalmaz. A lekérdezés minden objektumot külön sorként ad vissza az eredményhalmazban. Győződjön meg arról, hogy hozzáfér ehhez a fájlhoz. Ha a fájl SAS-kulccsal vagy egyéni identitással van védve, kiszolgálószintű hitelesítő adatokat kell beállítania az SQL-bejelentkezéshez.
Adatforrások használata
Az előző példa a fájl teljes elérési útját használja. Másik lehetőségként létrehozhat egy külső adatforrást a tár gyökérmappájára mutató hellyel, és használhatja ezt az adatforrást és a függvényben lévő OPENROWSET fájl relatív elérési útját:
create external data source covid
with ( location = 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases' );
go
select top 10 *
from openrowset(
bulk 'latest/ecdc_cases.jsonl',
data_source = 'covid',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b'
) with (doc nvarchar(max)) as rows
go
select top 10 *
from openrowset(
bulk 'latest/ecdc_cases.json',
data_source = 'covid',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b',
rowterminator = '0x0b' --> You need to override rowterminator to read classic JSON
) with (doc nvarchar(max)) as rows
Ha egy adatforrás SAS-kulccsal vagy egyéni identitással van védve, az adatforrást adatbázis-hatókörű hitelesítő adatokkal konfigurálhatja.
A következő szakaszokban megtudhatja, hogyan kérdezhet le különböző típusú JSON-fájlokat.
JSON-dokumentumok elemzése
Az előző példákban szereplő lekérdezések minden JSON-dokumentumot egyetlen sztringként ad vissza az eredményhalmaz egy külön sorában. Függvények JSON_VALUEOPENJSON használatával elemezheti a JSON-dokumentumok értékeit, és relációs értékként adja vissza őket, ahogyan az a következő példában is látható:
| date_rep | cases | geo_id |
|---|---|---|
| 2020-07-24 | 3 | AF |
| 2020-07-25 | 7 | AF |
| 2020-07-26 | 4 | AF |
| 2020-07-27 | 8 | AF |
JSON-mintadokumentum
A lekérdezési példák a következő struktúrájú dokumentumokat tartalmazó JSON-fájlokat olvasnak be:
{
"date_rep":"2020-07-24",
"day":24,"month":7,"year":2020,
"cases":13,"deaths":0,
"countries_and_territories":"Afghanistan",
"geo_id":"AF",
"country_territory_code":"AFG",
"continent_exp":"Asia",
"load_date":"2020-07-25 00:05:14",
"iso_country":"AF"
}
Megjegyzés:
Ha ezek a dokumentumok sorhatárolt JSON-ként vannak tárolva, be kell állítania FIELDTERMINATOR és FIELDQUOTE 0x0b. Ha szabványos JSON-formátummal rendelkezik, akkor a ROWTERMINATOR értékét 0x0b-re kell beállítania.
JSON-fájlok lekérdezése JSON_VALUE
Az alábbi lekérdezés bemutatja, hogyan használhatja a JSON_VALUE a skaláris értékek (date_rep, countries_and_territories, ) casesJSON-dokumentumokból való lekérésére:
select
JSON_VALUE(doc, '$.date_rep') AS date_reported,
JSON_VALUE(doc, '$.countries_and_territories') AS country,
CAST(JSON_VALUE(doc, '$.deaths') AS INT) as fatal,
JSON_VALUE(doc, '$.cases') as cases,
doc
from openrowset(
bulk 'latest/ecdc_cases.jsonl',
data_source = 'covid',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b'
) with (doc nvarchar(max)) as rows
order by JSON_VALUE(doc, '$.geo_id') desc
Miután JSON-tulajdonságokat kinyert egy JSON-dokumentumból, megadhatja az oszlop aliasát, és igény szerint valamilyen típusra vetheti a szöveges értéket.
JSON-fájlok lekérdezése OPENJSON használatával
Az alábbi lekérdezés OPENJSON-t használ. Lekéri a Szerbiában jelentett COVID-statisztikákat:
select
*
from openrowset(
bulk 'latest/ecdc_cases.jsonl',
data_source = 'covid',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b'
) with (doc nvarchar(max)) as rows
cross apply openjson (doc)
with ( date_rep datetime2,
cases int,
fatal int '$.deaths',
country varchar(100) '$.countries_and_territories')
where country = 'Serbia'
order by country, date_rep desc;
Az eredmények funkcionálisan megegyeznek a függvény használatával JSON_VALUE visszaadott eredményekkel. Bizonyos esetekben a OPENJSON előnyösebb lehet, mint a JSON_VALUE.
- A záradékban
WITHexplicit módon állíthatja be az oszlop aliasokat és a típusokat minden tulajdonsághoz. A függvényt nem kell minden oszlopban elhelyeznieCASTaSELECTlistában. -
OPENJSONakkor lehet gyorsabb, ha nagy számú tulajdonságot ad vissza. Ha csak 1-2 tulajdonságot ad vissza, aOPENJSONfüggvény többletterhelést jelenthet. - A függvényt
OPENJSONakkor kell használnia, ha minden dokumentumból elemeznie kell a tömböt, és csatlakoztatnia kell a szülősorhoz.
Következő lépések
A sorozat következő cikkei bemutatják, hogyan: