Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:✅ Конечная точка аналитики SQL и хранилище в Microsoft Fabric
В этой статье вы узнаете, как запрашивать ФАЙЛЫ JSON с помощью Fabric SQL, включая хранилище данных Fabric и конечную точку аналитики SQL.
JSON (нотация объектов JavaScript) — это упрощенный формат для полуструктурированных данных, широко используемый в больших данных для потоков датчиков, конфигураций Интернета вещей, журналов и геопространственных данных (например, GeoJSON).
Использование OPENROWSET для запроса JSON-файлов напрямую
В Хранилище данных Fabric и конечной точке аналитики SQL для Lakehouse можно запрашивать JSON-файлы непосредственно в озере OPENROWSET с помощью функции.
OPENROWSET( BULK '{{filepath}}', [ , <options> ... ])
[ WITH ( <column schema and mappings> ) ];
При запросе JSON-файлов с помощью OPENROWSET сначала укажите путь к файлу, который может быть прямым URL-адресом или шаблоном подстановочных знаков, предназначенным для одного или нескольких файлов. По умолчанию Fabric отображает каждое свойство верхнего уровня в документе JSON как отдельный столбец в результирующем наборе. Для файлов строк JSON каждая строка рассматривается как отдельная строка, что делает ее идеальной для сценариев потоковой передачи.
Если вам нужен дополнительный контроль:
- Используйте необязательное
WITHпредложение, чтобы определить схему явным образом и сопоставить столбцы с определенными свойствами JSON, включая вложенные пути. - Используется
DATA_SOURCEдля ссылки на корневое расположение относительных путей. - Настройте параметры обработки ошибок, такие как
MAXERRORS, чтобы эффективно управлять проблемами синтаксического анализа.
Распространенные варианты использования JSON-файла
Распространенные типы файлов JSON и варианты использования, которые можно обрабатывать в Microsoft Fabric:
- Файлы JSON с разделителями строк ("строки JSON"), в которых каждая строка является автономным, допустимым документом JSON (например, событием, чтением или записью журнала).
- Весь файл не обязательно является единым валидным документом JSON, это последовательность объектов JSON, разделенных символами новой строки.
- Файлы с этим форматом обычно имеют расширения
.jsonl,.ldjsonили.ndjson. Идеально подходит для потоковой передачи и сценариев добавления данных — авторы могут добавлять новые события как новые строки без перезаписи файла или нарушения структуры.
- Файлы JSON с одним документом ("классический JSON"), имеющие расширение
.json, в которых весь файл является одним допустимым документом JSON либо единым объектом, либо массивом объектов (возможно, вложенных).- Обычно он используется для конфигурации, создания моментальных снимков и экспорта наборов данных единым целым.
- Например, файлы GeoJSON обычно хранят один объект JSON, описывающий функции и их геометрии.
Запрос файлов JSONL с помощью OPENROWSET
Хранилище данных Fabric и конечная точка аналитики SQL для Lakehouse позволяют разработчикам SQL запрашивать файлы JSON Lines (.jsonl, ldjson, ndjson) непосредственно из озера данных с помощью OPENROWSET функции.
Эти файлы содержат один допустимый объект JSON на строку, что делает их идеальными для потоковой передачи и сценариев только для добавления.
Чтобы прочитать файл строк JSON, укажите его URL-адрес в аргументе 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'
);
По умолчанию OPENROWSET использует вывод схемы, автоматически обнаруживая все свойства верхнего уровня в каждом объекте JSON и возвращая их в виде столбцов.
Однако можно явно определить схему для управления возвращаемыми свойствами и переопределения выводимых типов данных:
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'
);
Явное определение схемы полезно, если:
- Вы хотите переопределить типы выводимых по умолчанию (например, принудительно использовать тип данных даты вместо varchar).
- Вам нужны стабильные названия столбцов и выборочные проекции.
- Вы хотите сопоставить столбцы с определенными свойствами JSON, включая вложенные пути.
Чтение сложных (вложенных) структур JSON с помощью OPENROWSET
Хранилище данных Fabric и конечная точка аналитики SQL для Lakehouse позволяют разработчикам SQL читать JSON с вложенными объектами или подмассивами непосредственно из озера с помощью OPENROWSET.
{
"type": "Feature",
"properties": {
"shapeName": "Serbia",
"shapeISO": "SRB",
"shapeID": "94879208B25563984444888",
"shapeGroup": "SRB",
"shapeType": "ADM0"
}
}
В следующем примере выполните запрос к файлу, содержащему примеры данных, и используйте конструкцию WITH для явного отображения свойств нижнего уровня.
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'
);
Замечание
В этом примере используется относительный путь без источника данных, который работает при запросе файлов в Lakehouse через конечную точку аналитики SQL. В хранилище данных Fabric необходимо выполнить следующие действия.
- Используйте абсолютный путь к файлу или
- Укажите корневой URL-адрес во внешнем источнике данных и ссылайтесь на него в
OPENROWSETвыражении, используя опциюDATA_SOURCE.
Преобразуйте вложенные массивы (из JSON в строки) с помощью OPENROWSET
Хранилище данных Fabric и конечная точка аналитики SQL для Lakehouse позволяют читать JSON-файлы с вложенными массивами с помощью OPENROWSET. Затем вы можете развернуть (разнормализовать) эти массивы с помощью CROSS APPLY OPENJSON. Этот метод полезен, если документ верхнего уровня содержит вложенный массив, который требуется в качестве одной строки для каждого элемента.
В следующем упрощенном примере ввода в документе GeoJSON имеется массив функций:
{
"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]]]
}
}
]
}
Следующий запрос:
- Считывает документ JSON из озера с помощью
OPENROWSET, проецируя свойство верхнего уровня типа вместе с массивом необработанных признаков. - Применяется
CROSS APPLY OPENJSONдля расширения массива функций, чтобы каждый элемент стал собственной строкой в результирующем наборе. В рамках этого расширения запрос извлекает вложенные значения с помощью выражений пути JSON. Такие значения, какshapeName,shapeISO, иgeometry, а также подробности, такие какgeometry.typeиcoordinates, теперь являются плоскими столбцами для упрощения анализа.
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;