Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:✅ punto de conexión de análisis SQL y Almacenamiento de datos en Microsoft Fabric
En este artículo, aprenderá a consultar archivos JSON mediante Fabric SQL, incluido Fabric Data Warehouse y el punto de conexión de SQL Analytics.
JSON (notación de objetos JavaScript) es un formato ligero para datos semiestructurados, ampliamente usado en macrodatos para flujos de sensor, configuraciones de IoT, registros y datos geoespaciales (por ejemplo, GeoJSON).
Uso de OPENROWSET para consultar archivos JSON directamente
En Fabric Data Warehouse y el punto de conexión SQL Analytics para un Lakehouse, puede consultar archivos JSON directamente en el lago mediante la función OPENROWSET.
OPENROWSET( BULK '{{filepath}}', [ , <options> ... ])
[ WITH ( <column schema and mappings> ) ];
Al consultar archivos JSON con OPENROWSET, empiece especificando la ruta de acceso del archivo, que puede ser una dirección URL directa o un patrón de caracteres comodín que tenga como destino uno o varios archivos. De forma predeterminada, Fabric proyecta cada propiedad de nivel superior en el documento JSON como una columna independiente en el conjunto de resultados. En el caso de los archivos de líneas JSON, cada línea se trata como una fila individual, lo que lo convierte en ideal para escenarios de streaming.
Si necesita más control:
- Use la cláusula opcional
WITHpara definir el esquema explícitamente y asignar columnas a propiedades JSON específicas, incluidas las rutas de acceso anidadas. - Use
DATA_SOURCEpara hacer referencia a una ubicación raíz para rutas de acceso relativas. - Configure parámetros de control de errores como
MAXERRORSpara administrar problemas de análisis correctamente.
Casos de uso comunes de archivos JSON
Tipos de archivo JSON comunes y casos de uso que puede controlar en Microsoft Fabric:
- Archivos JSON delimitados por líneas ("líneas JSON") donde cada línea es un documento JSON independiente y válido (por ejemplo, un evento, una lectura o una entrada de registro).
- Todo el archivo no es necesariamente un único documento JSON válido, sino una secuencia de objetos JSON separados por caracteres de nueva línea.
- Los archivos con este formato suelen tener extensiones
.jsonl,.ldjsono.ndjson. Ideal para streaming y escenarios de solo 'append', los usuarios pueden anexar un nuevo evento como una nueva línea sin volver a escribir el archivo o romper la estructura.
- Archivos JSON de documento único ("JSON clásico") con la
.jsonextensión donde todo el archivo es un documento JSON válido, ya sea un único objeto o una matriz de objetos (potencialmente anidado).- Normalmente se usa para la configuración, las instantáneas y los conjuntos de datos exportados en una sola pieza.
- Por ejemplo, los archivos GeoJSON suelen almacenar un único objeto JSON que describe las características y sus geometrías.
Consulta de archivos JSONL con OPENROWSET
Fabric Data Warehouse y el punto de conexión analítico de SQL para Lakehouse permiten a los desarrolladores de SQL consultar directamente los archivos JSON Lines (.jsonl, .ldjson, .ndjson) desde el lago de datos mediante la función OPENROWSET.
Estos archivos contienen un objeto JSON válido por línea, por lo que son ideales para escenarios de streaming y de solo anexión.
Para leer un archivo de líneas JSON, proporcione su dirección URL en el BULK argumento :
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'
);
De forma predeterminada, OPENROWSET usa la inferencia de esquemas, detecta automáticamente todas las propiedades de nivel superior de cada objeto JSON y las devuelve como columnas.
Sin embargo, puede definir explícitamente el esquema para controlar qué propiedades se devuelven e invalidan los tipos de datos inferidos:
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'
);
La definición de esquema explícita es útil cuando:
- Quiere invalidar los tipos inferidos predeterminados (por ejemplo, para forzar el tipo de datos date en lugar de varchar).
- Necesita nombres de columna estables y proyección selectiva.
- Quiere asignar columnas a propiedades JSON específicas, incluidas rutas anidadas.
Leer estructuras JSON complejas (anidadas) con OPENROWSET
Fabric Data Warehouse y el punto de conexión de SQL Analytics para Lakehouse permiten a los desarrolladores de SQL leer JSON con objetos anidados o subbarrays directamente desde el lago mediante OPENROWSET.
{
"type": "Feature",
"properties": {
"shapeName": "Serbia",
"shapeISO": "SRB",
"shapeID": "94879208B25563984444888",
"shapeGroup": "SRB",
"shapeType": "ADM0"
}
}
En el ejemplo siguiente, consulte un archivo que contenga datos de ejemplo y use la WITH cláusula para proyectar explícitamente sus propiedades de nivel hoja:
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'
);
Nota:
En este ejemplo se usa una ruta de acceso relativa sin origen de datos, que funciona al consultar archivos en Lakehouse a través de su punto de conexión SQL Analytics. En Fabric Data Warehouse, debe:
- Usar una ruta de acceso absoluta al archivo o
- Especifique una dirección URL raíz en un origen de datos externo y haga referencia a ella en la
OPENROWSETinstrucción mediante laDATA_SOURCEopción .
Expansión de matrices anidadas (JSON a filas) con OPENROWSET
Fabric Data Warehouse y el punto de conexión de SQL Analytics para Lakehouse permiten leer archivos JSON con matrices anidadas mediante OPENROWSET. A continuación, puede expandir (desanidar) esas matrices mediante CROSS APPLY OPENJSON. Este método es útil cuando un documento de nivel superior contiene una submatriz que desea convertir en una fila por elemento.
En la siguiente entrada de ejemplo simplificada, un documento similar a GeoJSON tiene una matriz de características:
{
"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]]]
}
}
]
}
La consulta siguiente:
- Lee el documento JSON del lago mediante
OPENROWSET, proyectando la propiedad de tipo en el nivel superior junto con la matriz de características en bruto. -
CROSS APPLY OPENJSONSe aplica para expandir la matriz de características para que cada elemento se convierta en su propia fila en el conjunto de resultados. Dentro de esta expansión, la consulta extrae valores anidados mediante expresiones de ruta JSON. Los valores comoshapeName,shapeISOy detalles comogeometryygeometry.typecoordinates, ahora son columnas planas para facilitar el análisis.
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;