Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:✅ końcowego punktu analizy SQL i magazynu danych w usłudze Microsoft Fabric
W tym artykule dowiesz się, jak wykonywać zapytania dotyczące plików JSON przy użyciu usługi Fabric SQL, w tym usługi Fabric Data Warehouse i punktu końcowego analizy SQL.
JSON (JavaScript Object Notation) to uproszczony format danych częściowo ustrukturyzowanych, powszechnie używany w danych big data na potrzeby strumieni czujników, konfiguracji IoT, dzienników i danych geoprzestrzennych (na przykład GeoJSON).
Używanie zestawu OPENROWSET do bezpośredniego wykonywania zapytań dotyczących plików JSON
W usłudze Fabric Data Warehouse i punkcie końcowym analizy SQL dla Lakehouse można wykonywać zapytania dotyczące plików JSON bezpośrednio w lake przy użyciu funkcji OPENROWSET.
OPENROWSET( BULK '{{filepath}}', [ , <options> ... ])
[ WITH ( <column schema and mappings> ) ];
Podczas wykonywania zapytań dotyczących plików JSON za pomocą funkcji OPENROWSET należy zacząć od określenia ścieżki pliku, która może być bezpośrednim adresem URL lub wzorcem wieloznacznymi przeznaczonym dla co najmniej jednego pliku. Domyślnie Fabric projektuje każdą właściwość najwyższego poziomu w dokumencie JSON jako oddzielną kolumnę w zestawie wyników. W przypadku plików JSON Lines każdy wiersz jest traktowany jako pojedynczy wiersz, co czyni go idealnym rozwiązaniem w scenariuszach przesyłania strumieniowego.
Jeśli potrzebujesz większej kontroli:
- Użyj opcjonalnej klauzuli
WITH, aby jawnie zdefiniować schemat i mapować kolumny na specyficzne właściwości JSON, w tym ścieżki zagnieżdżone. - Użyj
DATA_SOURCEdo odwoływania się do głównej lokalizacji dla ścieżek względnych. - Skonfiguruj parametry obsługi błędów, takie jak
MAXERRORS, aby płynnie zarządzać problemami związanych z analizowaniem.
Typowe przypadki użycia plików JSON
Typowe typy plików JSON i przypadki użycia, które można obsłużyć w usłudze Microsoft Fabric:
- Rozdzielane wierszami pliki JSON ("Linie JSON"), w których każdy wiersz jest autonomicznym, prawidłowym dokumentem JSON (na przykład zdarzeniem, odczytem lub wpisem dziennika).
- Cały plik nie musi być pojedynczym prawidłowym dokumentem JSON, a raczej sekwencją obiektów JSON oddzielonych znakami nowego wiersza.
- Pliki w tym formacie zwykle mają rozszerzenia
.jsonl,.ldjsonlub.ndjson. Idealne do przesyłania strumieniowego i scenariuszy typu tylko do dołączania – piszący mogą dołączyć nowe zdarzenie jako nową linię bez ponownego zapisywania pliku lub naruszania jego struktury.
- Pliki pojedynczego dokumentu JSON ("klasyczny JSON") z rozszerzeniem
.json, gdzie cały plik stanowi jeden prawidłowy dokument JSON — pojedynczy obiekt lub tablica obiektów (potencjalnie zagnieżdżonych).- Jest często używany do konfigurowania, migawek i zestawów danych eksportowanych w całości.
- Na przykład pliki GeoJSON często przechowują pojedynczy obiekt JSON opisujący cechy i ich geometrie.
Wykonywanie zapytań dotyczących plików JSONL przy użyciu zestawu OPENROWSET
Usługa Fabric Data Warehouse i punkt końcowy analizy SQL dla Lakehouse umożliwiają deweloperom SQL wykonywanie zapytań dotyczących plików JSON Lines (.jsonl, .ldjson, .ndjson) bezpośrednio z magazynu data lake przy użyciu OPENROWSET funkcji.
Te pliki zawierają jeden prawidłowy obiekt JSON w każdym wierszu, co czyni je idealnymi do przesyłania strumieniowego i scenariuszy tylko z dopisywaniem.
Aby odczytać plik wierszy JSON, podaj jego adres URL w argumencie 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'
);
Domyślnie OPENROWSET używa wnioskowania schematu, automatycznie odnajdując wszystkie właściwości najwyższego poziomu w każdym obiekcie JSON i zwracając je jako kolumny.
Można jednak jawnie zdefiniować schemat, aby kontrolować, które właściwości są zwracane i zastępować wywnioskowane typy danych:
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'
);
Jawna definicja schematu jest przydatna, gdy:
- Chcesz zastąpić domyślne typy wnioskowane (na przykład wymusić typ danych daty zamiast varchar).
- Potrzebne są stabilne nazwy kolumn i projekcja selektywna.
- Chcesz mapować kolumny na określone właściwości JSON, w tym ścieżki zagnieżdżone.
Odczytywanie złożonych (zagnieżdżonych) struktur JSON za pomocą zestawu OPENROWSET
Usługa Fabric Data Warehouse i punkt końcowy analizy SQL dla usługi Lakehouse umożliwiają deweloperom SQL odczytywanie kodu JSON z zagnieżdżonych obiektów lub podarray bezpośrednio z magazynu typu lake przy użyciu polecenia OPENROWSET.
{
"type": "Feature",
"properties": {
"shapeName": "Serbia",
"shapeISO": "SRB",
"shapeID": "94879208B25563984444888",
"shapeGroup": "SRB",
"shapeType": "ADM0"
}
}
W poniższym przykładzie wykonaj zapytanie dotyczące pliku zawierającego przykładowe dane i użyj klauzuli WITH, aby jawnie odwzorować jego właściwości na poziomie liścia.
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'
);
Uwaga / Notatka
W tym przykładzie użyto ścieżki względnej bez źródła danych, które działa podczas wykonywania zapytań dotyczących plików w usłudze Lakehouse za pośrednictwem punktu końcowego analizy SQL. W Fabric Data Warehouse musisz wykonać jedną z następujących czynności:
- Użyj ścieżki bezwzględnej do pliku lub
- Określ główny adres URL w zewnętrznym źródle danych i odwołaj się do niego w poleceniu
OPENROWSETprzy użyciu opcjiDATA_SOURCE.
Rozwiń zagnieżdżone tablice (od JSON do wierszy) za pomocą funkcji OPENROWSET
Usługa Fabric Data Warehouse i punkt końcowy analizy SQL dla usługi Lakehouse umożliwiają odczytywanie plików JSON z zagnieżdżonych tablic przy użyciu polecenia OPENROWSET. Następnie można rozwinąć (rozłożyć) te tablice przy użyciu polecenia CROSS APPLY OPENJSON. Ta metoda jest przydatna, kiedy w dokumencie najwyższego poziomu znajduje się tablica podrzędna, którą chcesz umieścić jako jeden wiersz na element.
W poniższym uproszczonym przykładzie wejściowym dokument podobny do geoJSON ma tablicę cech:
{
"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]]]
}
}
]
}
Następujące zapytanie:
- Odczytuje dokument JSON z jeziora przy użyciu metody
OPENROWSET, wyświetlając właściwość typu najwyższego poziomu wraz z tablicą nieprzetworzonych cech. - Stosuje
CROSS APPLY OPENJSONdo rozszerzenia tablicy cech, aby każdy element przekształcił się w osobny wiersz w zestawie wyników. W ramach tego rozszerzenia zapytanie wyodrębnia zagnieżdżone wartości przy użyciu wyrażeń ścieżki JSON. Wartości, takie jakshapeName,shapeISO, igeometryoraz szczegóły jakgeometry.typeicoordinates, są teraz płaskimi kolumnami w celu łatwiejszej analizy.
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;