Del via


Forespørg JSON-filer

Gælder for:✅ SQL Analytics-slutpunkt og warehouse i Microsoft Fabric

I denne artikel lærer du, hvordan du forespørger JSON-filer ved hjælp af Fabric SQL, herunder Fabric Data Warehouse og SQL-analyse-endpointet.

JSON (JavaScript Object Notation) er et letvægtsformat for semistrukturerede data, som er udbredt anvendt i big data til sensorstrømme, IoT-konfigurationer, logfiler og geospatiale data (for eksempel GeoJSON).

Brug OPENROWSET til at forespørge JSON-filer direkte

I Fabric Data Warehouse og SQL-analyse-endpointet for et Lakehouse kan du forespørge JSON-filer direkte i lake'en ved hjælp af funktionen OPENROWSET .

OPENROWSET( BULK '{{filepath}}', [ , <options> ... ])
[ WITH ( <column schema and mappings> ) ];

Når du forespørger JSON-filer med OPENROWSET, starter du med at angive filstien, som kan være en direkte URL eller et wildcard-mønster, der målretter en eller flere filer. Som standard projicerer Fabric hver top-level egenskab i JSON-dokumentet som en separat kolonne i resultatsættet. For JSON Lines-filer behandles hver linje som en individuel række, hvilket gør den ideel til streamingscenarier.

Hvis du har brug for mere kontrol:

  • Brug den valgfrie WITH klausul til eksplicit at definere skemaet og kortlægge kolonner til specifikke JSON-egenskaber, inklusive indlejrede stier.
  • Brug DATA_SOURCE den til at referere til en rodplacering for relative stier.
  • Konfigurer fejlhåndteringsparametre for MAXERRORS at håndtere parsing-problemer elegant.

Almindelige JSON-filanvendelser

Almindelige JSON-filtyper og brugsscenarier, du kan håndtere i Microsoft Fabric:

  • Linjeafgrænsede JSON ("JSON Lines") filer, hvor hver linje er et selvstændigt, gyldigt JSON-dokument (for eksempel en begivenhed, en læsning eller en logbog).
    • Hele filen er ikke nødvendigvis et enkelt gyldigt JSON-dokument – snarere er det en sekvens af JSON-objekter adskilt af linjeskiftetegn.
    • Filerne med dette format har typisk endelser .jsonl, .ldjson, eller .ndjson. Ideelt til streaming og kun tilføjelser af scenarier – forfattere kan tilføje en ny begivenhed som en ny linje uden at omskrive filen eller bryde strukturen.
  • Enkelt-dokument JSON ("klassisk JSON") filer med endelsen, .json hvor hele filen er ét gyldigt JSON-dokument – enten et enkelt objekt eller et array af objekter (potentielt indlejret).
    • Det bruges ofte til konfiguration, snapshots og datasæt, der eksporteres i ét stykke.
    • For eksempel gemmer GeoJSON-filer ofte et enkelt JSON-objekt, der beskriver funktioner og deres geometrier.

Foresøg JSONL-filer med OPENROWSET

Fabric Data Warehouse og SQL-analyse-endpointet for Lakehouse gør det muligt for SQL-udviklere at forespørge JSON Lines (.jsonl, .ldjson, .ndjson) filer direkte fra data lake ved at bruge funktionen OPENROWSET .

Disse filer indeholder ét gyldigt JSON-objekt pr. linje, hvilket gør dem ideelle til streaming- og append-scenarier. For at læse en JSON Lines-fil, angiv dens URL i argumentet 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'
);

Som standard bruger den OPENROWSET skema-inferens, hvor alle topniveau-egenskaber i hvert JSON-objekt automatisk opdages og returneres som kolonner.

Du kan dog eksplicit definere skemaet til at styre, hvilke egenskaber der returneres, og tilsidesætte udledte datatyper:

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'
);

Eksplicit skemadefinition er nyttig, når:

  • Du vil tilsidesætte standard udledte typer (for eksempel for at tvinge datodatatypen i stedet for varchar).
  • Du har brug for stabile kolonnenavne og selektiv projektion.
  • Du vil mappe kolonner til specifikke JSON-egenskaber, inklusive indlejrede stier.

Læs komplekse (indlejrede) JSON-strukturer med OPENROWSET

Fabric Data Warehouse og SQL-analyse-endpointet for Lakehouse lader SQL-udviklere læse JSON med indlejrede objekter eller subarrays direkte fra lake ved at bruge OPENROWSET.

{
  "type": "Feature",
  "properties": {
    "shapeName": "Serbia",
    "shapeISO": "SRB",
    "shapeID": "94879208B25563984444888",
    "shapeGroup": "SRB",
    "shapeType": "ADM0"
  }
}

I det følgende eksempel forespørger du en fil, der indeholder eksempeldata, og bruger klausulen WITH til eksplicit at projicere dens egenskaber på bladniveau:

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'
  );

Bemærkning

Dette eksempel bruger en relativ sti uden en datakilde, som virker, når du forespørger filer i din Lakehouse via dens SQL-analyseendepunkt. I Fabric Data Warehouse skal du enten:

  • Brug en absolut sti til filen, eller
  • Angiv en rod-URL i en ekstern datakilde og referer til den i sætningen OPENROWSET ved at bruge muligheden DATA_SOURCE .

Udvid indlejrede arrays (JSON til rækker) med OPENROWSET

Fabric Data Warehouse og SQL-analyse-endpointet for Lakehouse lader dig læse JSON-filer med indlejrede arrays ved at bruge OPENROWSET. Derefter kan du udvide (af-neste) disse arrays ved at bruge CROSS APPLY OPENJSON. Denne metode er nyttig, når et topniveau-dokument indeholder et underarray, du ønsker som én række pr. element.

I det følgende, forenklede eksempelinput har et GeoJSON-lignende dokument et features-array:

{
  "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]]]
      }
    }
  ]
}

Følgende forespørgsel:

  1. Læser JSON-dokumentet fra søen ved at bruge OPENROWSET, og projicerer topniveau-typeegenskaben sammen med det rå features-array.
  2. Gælder CROSS APPLY OPENJSON for at udvide features-arrayet, så hvert element bliver sin egen række i resultatsættet. Inden for denne udvidelse udtrækker forespørgslen indlejrede værdier ved at bruge JSON-stiudtryk. Værdier som shapeName, shapeISO, og geometry detaljer som geometry.type og coordinates, er nu flade kolonner for lettere analyse.
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;