Aracılığıyla paylaş


JSON dosyalarını sorgulama

Şunlar için geçerlidir:✅ Microsoft Fabric'te SQL analiz uç noktası ve Ambarı

Bu makalede Doku Veri Ambarı ve SQL analiz uç noktası dahil olmak üzere Doku SQL kullanarak JSON dosyalarını sorgulamayı öğreneceksiniz.

JSON (JavaScript Nesne Gösterimi), algılayıcı akışları, IoT yapılandırmaları, günlükler ve jeo-uzamsal veriler (örneğin GeoJSON) için büyük verilerde yaygın olarak kullanılan yarı yapılandırılmış veriler için basit bir biçimdir.

JSON dosyalarını doğrudan sorgulamak için OPENROWSET kullanma

Fabric Veri Ambarı'nda ve bir Lakehouse için SQL analiz uç noktasında, OPENROWSET işlevini kullanarak JSON dosyalarını doğrudan göl üzerinde sorgulayabilirsiniz.

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

OPENROWSET ile JSON dosyalarını sorguladığınızda, doğrudan URL veya bir veya daha fazla dosyayı hedefleyen joker karakter deseni olabilecek dosya yolunu belirterek başlarsınız. Varsayılan olarak, Fabric, JSON belgesindeki her üst düzey özelliği sonuç kümesinde ayrı bir sütun olarak yansıtır. JSON Satırları dosyaları için her satır ayrı bir satır olarak kabul edilir ve akış senaryoları için idealdir.

Daha fazla denetime ihtiyacınız varsa:

  • Şemayı açıkça tanımlamak ve sütunları iç içe yerleştirilmiş yollar da dahil olmak üzere belirli JSON özellikleriyle eşlemek için isteğe bağlı WITH yan tümcesini kullanın.
  • DATA_SOURCE kullanarak göreli yollar için kök konuma referans alın.
  • Ayrıştırma sorunlarını düzgün bir şekilde yönetmek gibi MAXERRORS hata işleme parametrelerini yapılandırın.

Yaygın JSON dosya kullanım örnekleri

Microsoft Fabric'te işleyebileceğiniz yaygın JSON dosya türleri ve kullanım örnekleri:

  • Her satırın tek başına, geçerli bir JSON belgesi (örneğin, olay, okuma veya günlük girdisi) olduğu satırla ayrılmış JSON ("JSON Satırları") dosyaları.
    • Dosyanın tamamı tek bir geçerli JSON belgesi olmayabilir; yeni satır karakterleriyle ayrılmış bir JSON nesneleri dizisidir.
    • Bu biçime sahip dosyalar genellikle , .jsonlveya .ldjsonuzantılarına .ndjsonsahiptir. Akış ve yalnızca ekleme senaryoları için ideal olan yazarlar, dosyayı yeniden yazmadan veya yapıyı bozmadan yeni bir olayı yeni bir satır olarak ekleyebilir.
  • Tek belgeli JSON ("klasik JSON") dosyaları, .json uzantısına sahip ve tamamı geçerli bir JSON belgesi olan dosyalardır; bu, tek bir nesne veya (iç içe yerleştirilmiş olabilecek) bir nesne dizisi şeklinde olabilir.
    • Tek parça halinde dışarı aktarılan yapılandırma, anlık görüntüler ve veri kümeleri için yaygın olarak kullanılır.
    • Örneğin, GeoJSON dosyaları genellikle özellikleri ve geometrilerini açıklayan tek bir JSON nesnesi depolar.

OPENROWSET ile JSONL dosyalarını sorgulama

Lakehouse için Fabric Veri Ambarı ve SQL analiz uç noktası, SQL geliştiricilerinin OPENROWSET işlevini kullanarak JSON Satırları (.jsonl, .ldjson, .ndjson) dosyalarını doğrudan veri gölünden sorgulamasına olanak tanır.

Bu dosyalar satır başına geçerli bir JSON nesnesi içerir ve bu da akış ve yalnızca ekleme senaryoları için idealdir. Bir JSON Lines dosyasını okumak için URL'sini BULK bağımsız değişkenine sağlayın.

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

Varsayılan olarak, OPENROWSET her JSON nesnesindeki tüm üst düzey özellikleri otomatik olarak bularak ve bunları sütun olarak döndürerek şema çıkarımı kullanır.

Ancak, hangi özelliklerin döndürüleceğini denetlemek ve çıkarılan veri türlerini geçersiz kılmak için şemayı açıkça tanımlayabilirsiniz:

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

Açık şema tanımı şu durumlarda kullanışlıdır:

  • Varsayılan çıkarsanan türleri geçersiz kılmak istiyorsunuz (örneğin, varchar yerine tarih veri türünü zorlamak için).
  • Kararlı sütun adları ve seçmeli projeksiyon gerekir.
  • Sütunları iç içe yerleştirilmiş yollar da dahil olmak üzere belirli JSON özellikleriyle eşlemek istiyorsunuz.

OPENROWSET ile karmaşık (iç içe yerleştirilmiş) JSON yapılarını okuma

Lakehouse için Doku Veri Ambarı ve SQL analiz uç noktası, SQL geliştiricilerinin iç içe nesneler veya alt diziler içeren JSON verilerini doğrudan gölden OPENROWSET kullanarak okumasına olanak tanır.

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

Aşağıdaki örnekte, örnek veriler içeren bir dosyayı sorgulayıp yan tümcesini WITH kullanarak yaprak düzeyi özelliklerini açıkça yansıtın:

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

Uyarı

Bu örnek, Lakehouse'unuzda SQL analiz uç noktası aracılığıyla dosyaları sorgularken çalışan veri kaynağı olmayan göreli bir yol kullanır. Fabric Veri Ambarı'nda şunlardan birini yapmanız gerekir:

  • Dosyanın mutlak yolunu kullanın veya
  • Dış veri kaynağında bir kök URL belirtin ve OPENROWSET deyiminde buna DATA_SOURCE seçeneğini kullanarak başvurun.

OPENROWSET ile iç içe dizileri (JSON'ı satırlara) genişletme

Fabric Veri Ambarı ve Lakehouse için SQL analiz uçnoktası kullanarak, iç içe dizilere sahip JSON dosyalarını OPENROWSET ile okumanızı sağlar. Ardından, bu dizileri CROSS APPLY OPENJSON kullanarak genişletebilir (unnest edebilirsiniz). Bu yöntem, üst düzey bir belge öğe başına bir satır olarak istediğiniz bir alt dizi içerdiğinde kullanışlıdır.

Aşağıdaki basitleştirilmiş örnek girişte, GeoJSON benzeri bir belgenin özellikler dizisi vardır:

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

Aşağıdaki sorgu:

  1. OPENROWSET kullanarak JSON belgesini gölden okur ve ham özellikler dizisiyle birlikte en üst düzeydeki tür özelliğini yansıtır.
  2. CROSS APPLY OPENJSON her öğenin sonuç kümesinde ayrı bir satır olması için özellikler dizisini genişletir. Bu genişletmede sorgu, JSON yol ifadelerini kullanarak iç içe değerleri ayıklar. Değerler shapeName, shapeISO ve ayrıntılar geometry, geometry.type ile coordinates artık daha kolay analiz için düz sütunlar haline getirildi.
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;