Del via


Søk i JSON-filer

Gjelder for:✅ SQL Analytics-endepunkt og Warehouse i Microsoft Fabric

I denne artikkelen vil du lære hvordan du kan spørre JSON-filer ved hjelp av Fabric SQL, inkludert Fabric Data Warehouse og SQL-analyse-endepunktet.

JSON (JavaScript Object Notation) er et lettvektsformat for semistrukturerte data, mye brukt i big data for sensorstrømmer, IoT-konfigurasjoner, logger og geospatiale data (for eksempel GeoJSON).

Bruk OPENROWSET for å spørre JSON-filer direkte

I Fabric Data Warehouse og SQL-analyse-endepunktet for en Lakehouse, kan du spørre JSON-filer direkte i lake ved å bruke funksjonen OPENROWSET .

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

Når du spør JSON-filer med OPENROWSET, starter du med å spesifisere filbanen, som kan være en direkte URL eller et wildcard-mønster som retter seg mot én eller flere filer. Som standard projiserer Fabric hver toppnivåegenskap i JSON-dokumentet som en egen kolonne i resultatsettet. For JSON Lines-filer behandles hver linje som en egen rad, noe som gjør den ideell for strømmingsscenarier.

Hvis du trenger mer kontroll:

  • Bruk den valgfrie WITH klausulen for å definere skjemaet eksplisitt og kartlegge kolonner til spesifikke JSON-egenskaper, inkludert nestede stier.
  • Bruk DATA_SOURCE for å referere til en rotplassering for relative stier.
  • Konfigurer feilhåndteringsparametere for MAXERRORS å håndtere parsingproblemer på en smidig måte.

Brukstilfeller for vanlige JSON-filer

Vanlige JSON-filtyper og bruksområder du kan håndtere i Microsoft Fabric:

  • Linjeavgrensede JSON-filer ("JSON-linjer") der hver linje er et frittstående, gyldig JSON-dokument (for eksempel en hendelse, en lesning eller en loggoppføring).
    • Hele filen er ikke nødvendigvis et enkelt gyldig JSON-dokument – det er snarere en sekvens av JSON-objekter adskilt med linjeskift.
    • Filene med dette formatet har vanligvis filendelser .jsonl, .ldjson, eller .ndjson. Ideelt for strømming og kun append-scenarier – forfattere kan legge til en ny hendelse som en ny linje uten å omskrive filen eller bryte strukturen.
  • Enkeltdokument-JSON ("klassisk JSON")-filer med .json endelsen der hele filen er ett gyldig JSON-dokument – enten et enkelt objekt eller et array av objekter (potensielt nestet).
    • Det brukes ofte til konfigurasjon, snapshots og datasett som eksporteres i ett stykke.
    • For eksempel lagrer GeoJSON-filer ofte et enkelt JSON-objekt som beskriver egenskaper og deres geometrier.

Søk i JSONL-filer med OPENROWSET

Fabric Data Warehouse og SQL-analyse-endepunktet for Lakehouse gjør det mulig for SQL-utviklere å spørre JSON Lines (.jsonl, .ldjson, .ndjson) filer direkte fra data lake ved å bruke funksjonen OPENROWSET .

Disse filene inneholder ett gyldig JSON-objekt per linje, noe som gjør dem ideelle for strømming og kun append-scenarier. For å lese en JSON Lines-fil, oppgi URL-en 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 OPENROWSET bruker skjema-inferens, som automatisk oppdager alle toppnivå-egenskaper i hvert JSON-objekt og returnerer dem som kolonner.

Du kan imidlertid eksplisitt definere skjemaet for å kontrollere hvilke egenskaper som returneres og overstyre utledede 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'
);

Eksplisitt skjemadefinisjon er nyttig når:

  • Du vil overstyre standard utledede typer (for eksempel for å tvinge datodatatypen i stedet for varchar).
  • Du trenger stabile kolonnenavn og selektiv projeksjon.
  • Du vil mappe kolonner til spesifikke JSON-egenskaper, inkludert nestede stier.

Les komplekse (nestede) JSON-strukturer med OPENROWSET

Fabric Data Warehouse og SQL-analyseendepunktet for Lakehouse lar SQL-utviklere lese JSON med nestede objekter eller underarrayer direkte fra lake ved å bruke OPENROWSET.

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

I følgende eksempel, spør i en fil som inneholder eksempeldata og bruk klausulen WITH til eksplisitt å projisere dens egenskaper på bladnivå:

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

Notat

Dette eksempelet bruker en relativ sti uten datakilde, som fungerer når du spør filer i Lakehouse via SQL-analyse-endepunktet. I Fabric Data Warehouse må du enten:

  • Bruk en absolutt sti til filen, eller
  • Spesifiser en rot-URL i en ekstern datakilde og referer til den i setningen OPENROWSET ved å bruke alternativet DATA_SOURCE .

Utvid nestede matriser (JSON til rader) med OPENROWSET

Fabric Data Warehouse og SQL-analyse-endepunktet for Lakehouse lar deg lese JSON-filer med nestede matriser ved å bruke OPENROWSET. Deretter kan du utvide (unneste) disse arrayene ved å bruke CROSS APPLY OPENJSON. Denne metoden er nyttig når et toppnivådokument inneholder et underarray du ønsker som én rad per element.

I det følgende, forenklede eksempelinndataet har et GeoJSON-lignende dokument et funksjonsarray:

{
  "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 spørring:

  1. Leser JSON-dokumentet fra innsjøen ved å bruke OPENROWSET, og projisere toppnivå-typeegenskapen sammen med råfeature-arrayet.
  2. Gjelder CROSS APPLY OPENJSON for å utvide features-arrayet slik at hvert element blir sin egen rad i resultatsettet. Innenfor denne utvidelsen trekker spørringen ut nestede verdier ved å bruke JSON-stiuttrykk. Verdier som shapeName, shapeISO, og geometry detaljer som geometry.type og coordinates, er nå flate kolonner for enklere 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;