JSON-fájlok lekérdezése kiszolgáló nélküli SQL-készlet használatával az Azure Synapse Analyticsben
Ebben a cikkben megtudhatja, hogyan írhat lekérdezést kiszolgáló nélküli SQL-készlet használatával az Azure Synapse Analyticsben. A lekérdezés célja JSON-fájlok olvasása AZ OPENROW Standard kiadás T 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
: ésldjson
ndjson
.
JSON-dokumentumok olvasása
A JSON-fájl tartalmát úgy tekintheti meg a legegyszerűbben, ha megadja a fájl URL-címét a függvénynek, megadja a OPENROWSET
csv FORMAT
értéket, és beállítja az és 0x0b
fieldquote
a fieldterminator
. 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:
Bizonylat |
---|
{"date_rep":"2020-07-24","day":24,"month":7,"year":2020,"cases":3,"deaths":0,"geo_id":"AF"} |
{"date_rep":"2020-07-25","day":25,"month":7,"year":2020,"cases":7,"deaths":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_VALUE
OPENJSON
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 | elemzése | 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, 0x0b kell beállítania ROWTERMINATOR
.
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
, cases
) JSON-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 előnyt jelenthet a OPENJSON
következőhöz:JSON_VALUE
- A záradékban
WITH
explicit módon állíthatja be az oszlop aliasokat és a típusokat minden tulajdonsághoz. A függvényt nem kell minden oszlopban elhelyeznieCAST
aSELECT
listában. OPENJSON
akkor lehet gyorsabb, ha nagy számú tulajdonságot ad vissza. Ha csak 1-2 tulajdonságot ad vissza, aOPENJSON
függvény többletterhelést jelenthet.- A függvényt
OPENJSON
akkor 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: