Dotaz na JSON súbory

Vzťahuje sa na:✅ koncový bod analýzy SQL a sklad v službe Microsoft Fabric

V tomto článku sa naučíte, ako dotazovať JSON súbory pomocou Fabric SQL, vrátane Fabric Data Warehouse a SQL analytics endpointu.

JSON (JavaScript Object Notation) je ľahký formát pre polostruktúrované dáta, široko používaný vo veľkých dátach pre senzorové toky, IoT konfigurácie, logy a geopriestorové dáta (napríklad GeoJSON).

Použite OPENROWSET na priamy dotaz na JSON súbory

V Fabric Data Warehouse a SQL analytics endpointe pre Lakehouse môžete dotazovať JSON súbory priamo v jazere pomocou tejto funkcie OPENROWSET .

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

Keď dotazujete JSON súbory pomocou OPENROWSET, začnete špecifikovaním cesty k súboru, ktorá môže byť priamou URL alebo vzorom divokej karty, ktorý cieli na jeden alebo viac súborov. Štandardne Fabric projektuje každú najvyššiu vlastnosť v JSON dokumente ako samostatný stĺpec vo výsledkovej množine. Pre súbory JSON Lines sa každý riadok považuje za samostatný riadok, čo ho robí ideálnym pre streamovacie scenáre.

Ak potrebujete väčšiu kontrolu:

  • Použite voliteľnú klauzulu WITH na explicitnú definíciu schémy a mapovanie stĺpcov na konkrétne vlastnosti JSON, vrátane vnorených ciest.
  • Použite DATA_SOURCE na referenciu koreňovej polohy pre relatívne cesty.
  • Nakonfigurujte parametre spracovania chýb, aby MAXERRORS ste mohli efektívne riešiť problémy s parsovaním.

Bežné prípady použitia súborov JSON

Bežné typy JSON súborov a prípady použitia, ktoré zvládnete v Microsoft Fabric:

  • Súbory JSON ("JSON Lines") oddelené riadkom, kde každý riadok je samostatný, platný JSON dokument (napríklad udalosť, čítanie alebo záznam v logu).
    • Celý súbor nemusí byť nevyhnutne jeden platný JSON dokument – skôr je to sekvencia JSON objektov oddelených znakmi nových riadkov.
    • Súbory s týmto formátom zvyčajne obsahujú prípony .jsonl, .ldjson, alebo .ndjson. Ideálne pre streamovanie a len pridávanie scenárov – autori môžu pridať novú udalosť ako nový riadok bez prepísania súboru alebo narušenia štruktúry.
  • Jednodokumentové JSON ("klasické JSON") súbory s príponou .json , kde celý súbor je jeden platný JSON dokument – buď jeden objekt, alebo pole objektov (potenciálne vnorené).
    • Bežne sa používa na konfiguráciu, snímky a dátové súbory exportované v jednom kuse.
    • Napríklad súbory GeoJSON bežne ukladajú jeden objekt JSON popisujúci prvky a ich geometriu.

Dotazovať JSONL súbory pomocou OPENROWSET

Fabric Data Warehouse a SQL analytics endpoint pre Lakehouse umožňujú SQL vývojárom dotazovať JSON Lines (.jsonl, .ldjson, .ndjson) súbory priamo z dátového jazera pomocou tejto funkcie OPENROWSET .

Tieto súbory obsahujú jeden platný JSON objekt na riadok, čo ich robí ideálnymi pre streamovanie a scenáre iba pripojenia. Ak chcete prečítať súbor JSON Lines, zadajte jeho URL v argumente BULK :

SELECT TOP 10 *
FROM OPENROWSET(
    BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.jsonl'
);

Štandardne používa OPENROWSET schémovú inferenciu, ktorá automaticky objavuje všetky vlastnosti najvyššej úrovne v každom objekte JSON a vracia ich ako stĺpce.

Avšak môžete explicitne definovať schému na ovládanie, ktoré vlastnosti sa vracajú a ktoré prepisujú odvodené dátové typy:

SELECT TOP 10 *
FROM OPENROWSET(
    BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.jsonl'
) WITH (
    country_region VARCHAR(100),
    confirmed INT,
    date_reported DATE '$.updated'
);

Explicitná definícia schémy je užitočná, keď:

  • Chcete prepísať predvolené odvodené typy (napríklad vynútiť dátumový typ namiesto varchar).
  • Potrebujete stabilné názvy stĺpcov a selektívnu projekciu.
  • Chcete mapovať stĺpce na konkrétne JSON vlastnosti, vrátane vnorených ciest.

Čítajte komplexné (vnorené) JSON štruktúry pomocou OPENROWSET

Fabric Data Warehouse a SQL analytics endpoint pre Lakehouse umožňujú SQL vývojárom čítať JSON s vnorenými objektmi alebo podpoľami priamo z jazera pomocou OPENROWSET.

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

V nasledujúcom príklade sa dotazujte na súbor, ktorý obsahuje ukážkové dáta, a použite túto klauzulu WITH na explicitné premietanie jeho vlastností na úrovni listu:

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

Poznámka

Tento príklad používa relatívnu cestu bez dátového zdroja, čo funguje pri dotazovaní súborov vo vašom Lakehouse cez jeho SQL analytics endpoint. V Fabric Data Warehouse musíte buď:

  • Použite absolútnu cestu k súboru, alebo
  • Špecifikujte koreňovú URL adresu v externom zdroji dát a odkazujte naň vo vyhlásení OPENROWSET pomocou tejto DATA_SOURCE možnosti.

Rozvinúť vnorené polia (JSON na riadky) pomocou OPENROWSET

Fabric Data Warehouse a SQL analytics endpoint pre Lakehouse vám umožňujú čítať JSON súbory s vnorenými poliami pomocou OPENROWSET. Potom môžete tieto polia rozbaliť (rozvnoriť) použitím .CROSS APPLY OPENJSON Táto metóda je užitočná, keď dokument na najvyššej úrovni obsahuje podpole, ktoré chcete mať ako jeden riadok na každý prvok.

V nasledujúcom, zjednodušenom príklade má dokument podobný GeoJSON-u pole príznakov:

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

Nasledujúci dotaz:

  1. Prečíta JSON dokument z jazera pomocou OPENROWSET, premietajúc najvyššiu vlastnosť typu spolu so surovým poľom príznakov.
  2. Aplikuje CROSS APPLY OPENJSON na rozšírenie poľa vlastností tak, že každý prvok sa stane vlastným riadkom vo výslednej množine. V rámci tohto rozšírenia dotaz extrahuje vnorené hodnoty pomocou JSON path expression. Hodnoty ako shapeName, shapeISO, a geometry detaily ako geometry.type a coordinates, sú teraz ploché stĺpce pre jednoduchšiu analýzu.
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;