Compartir a través de


Procedimiento para consultar datos anidados en bases de datos reflejadas de Microsoft Fabric desde Azure Cosmos DB

Use la base de datos reflejada en Microsoft Fabric para consultar datos JSON anidados procedentes de Azure Cosmos DB para NoSQL.

Prerrequisitos

Sugerencia

Se recomienda usar una copia de prueba o desarrollo de los datos existentes de Azure Cosmos DB que se pueden recuperar rápidamente de una copia de seguridad.

Creación de datos anidados en la base de datos de origen

Cree elementos JSON en la cuenta de Azure Cosmos DB para NoSQL que contengan distintos niveles de datos JSON anidados.

  1. Vaya a la cuenta de Azure Cosmos DB en Azure Portal.

  2. Seleccione Explorador de datos en el menú de recursos.

  3. Use + Nuevo contenedor para crear un nuevo contenedor. En esta guía, asigne al contenedor TestCel nombre . El nombre de la base de datos correspondiente es arbitrario.

  4. Use la opción + Nuevo elemento varias veces para crear y guardar estos cinco elementos JSON.

    {
      "id": "123-abc-xyz",
      "name": "A 13",
      "country": "USA",
      "items": [
        {
          "purchased": "11/23/2022",
          "order_id": "3432-2333-2234-3434",
          "item_description": "item1"
        },
        {
          "purchased": "01/20/2023",
          "order_id": "3431-3454-1231-8080",
          "item_description": "item2"
        },
        {
          "purchased": "02/20/2023",
          "order_id": "2322-2435-4354-2324",
          "item_description": "item3"
        }
      ]
    }
    
    {
      "id": "343-abc-def",
      "name": "B 22",
      "country": "USA",
      "items": [
        {
          "purchased": "01/20/2023",
          "order_id": "2431-2322-1545-2322",
          "item_description": "book1"
        },
        {
          "purchased": "01/21/2023",
          "order_id": "3498-3433-2322-2320",
          "item_description": "book2"
        },
        {
          "purchased": "01/24/2023",
          "order_id": "9794-8858-7578-9899",
          "item_description": "book3"
        }
      ]
    }
    
    {
      "id": "232-abc-x43",
      "name": "C 13",
      "country": "USA",
      "items": [
        {
          "purchased": "04/03/2023",
          "order_id": "9982-2322-4545-3546",
          "item_description": "clothing1"
        },
        {
          "purchased": "05/20/2023",
          "order_id": "7989-9989-8688-3446",
          "item_description": "clothing2"
        },
        {
          "purchased": "05/27/2023",
          "order_id": "9898-2322-1134-2322",
          "item_description": "clothing3"
        }
      ]
    }
    
    {
      "id": "677-abc-yuu",
      "name": "D 78",
      "country": "USA"
    }
    
    {
      "id": "979-abc-dfd",
      "name": "E 45",
      "country": "USA"
    }
    

Configuración de la creación de reflejos y requisitos previos

Configure la creación de reflejo para la base de datos de Azure Cosmos DB para NoSQL. Si no está seguro de cómo configurar la creación de reflejo, consulte el tutorial configuración de la base de datos reflejada.

  1. Vaya al portal de Fabric.

  2. Cree una nueva conexión y una base de datos reflejada mediante las credenciales de la cuenta de Azure Cosmos DB.

  3. Espere a que la replicación finalice la instantánea inicial de los datos.

Consulta de datos anidados básicos

Ahora, use el punto de conexión de SQL Analytics para crear una consulta que pueda controlar datos JSON anidados simples.

  1. Vaya a la base de datos reflejada en el portal de Fabric.

  2. Cambie del punto de conexión de Azure Cosmos DB reflejado a SQL Analytics.

    Captura de pantalla del selector para cambiar entre elementos en el portal de Fabric.

  3. Abra el menú contextual de la tabla de prueba y seleccione Nueva consulta SQL.

  4. Ejecute esta consulta para expandir la items matriz con OPENJSON. Esta consulta usa OUTER APPLY para incluir elementos adicionales que podrían no tener una matriz de elementos.

    SELECT 
        t.name, 
        t.id, 
        t.country, 
        P.purchased, 
        P.order_id, 
        P.item_description 
    FROM OrdersDB_TestC AS t
    OUTER APPLY OPENJSON(t.items) WITH
    (
        purchased datetime '$.purchased',
        order_id varchar(100) '$.order_id',
        item_description varchar(200) '$.item_description'
    ) as P
    

    Sugerencia

    Al elegir los tipos de datos en OPENJSON, el uso varchar(max) de para tipos de cadena podría empeorar el rendimiento de las consultas. En su lugar, use varchar(n) wher n podría ser cualquier número. Cuanto menor n sea, más probable será que vea un mejor rendimiento de las consultas.

  5. Use CROSS APPLY en la siguiente consulta para mostrar solo elementos con una items matriz.

    SELECT
        t.name,
        t.id,
        t.country,
        P.purchased,
        P.order_id,
        P.item_description 
    FROM
        OrdersDB_TestC as t CROSS APPLY OPENJSON(t.items) WITH (
            purchased datetime '$.purchased',
            order_id varchar(100) '$.order_id',
            item_description varchar(200) '$.item_description' 
        ) as P 
    

Consulta de datos anidados básicos con inferencia de esquema automático

Siga los pasos del 1 al 3 del ejemplo anterior. Con el mismo conjunto de datos, podemos crear una consulta para aplanar los datos sin tener que definir explícitamente el esquema.

  1. Ejecute esta consulta para expandir la items matriz con OPENJSON sin definir el esquema. Esto aplana la matriz de elementos un nivel mediante la propagación de cada objeto anidado en una nueva fila.

    SELECT
        t.name,
        t.id,
        t.country,
        p.*
    FROM OrdersDB_TestC as t 
    CROSS APPLY OPENJSON(t.items) p
    
  2. Ejecute esta consulta para expandir aún más la items matriz con OPENJSON sin definir el esquema. Esto aplana la matriz de elementos dos niveles mediante la propagación de cada propiedad dentro de cada objeto anidado en una nueva fila.

    SELECT
        t.name,
        t.id,
        t.country,
        q.*
    FROM OrdersDB_TestC as t 
    CROSS APPLY OPENJSON(t.items) q
    OUTER APPLY OPENJSON(t.items) p
    

Creación de datos profundamente anidados

Para basarse en este ejemplo de datos anidados, vamos a agregar un ejemplo de datos profundamente anidado.

  1. Vaya a la cuenta de Azure Cosmos DB en Azure Portal.

  2. Seleccione Explorador de datos en el menú de recursos.

  3. Use + Nuevo contenedor para crear un nuevo contenedor. En esta guía, asigne al contenedor TestDel nombre . El nombre de la base de datos correspondiente es arbitrario.

  4. Use la opción + Nuevo elemento varias veces para crear y guardar este elemento JSON.

    {
      "id": "eadca09b-e618-4090-a25d-b424a26c2361",
      "entityType": "Package",
      "packages": [
        {
          "packageid": "fiwewsb-f342-jofd-a231-c2321",
          "storageTemperature": "69",
          "highValue": true,
          "items": [
            {
              "id": "1",
              "name": "Item1",
              "properties": {
                "weight": "2",
                "isFragile": "no"
              }
            },
            {
              "id": "2",
              "name": "Item2",
              "properties": {
                "weight": "4",
                "isFragile": "yes"
              }
            }
          ]
        },
        {
          "packageid": "d24343-dfdw-retd-x414-f34345",
          "storageTemperature": "78",
          "highValue": false,
          "items": [
            {
              "id": "3",
              "name": "Item3",
              "properties": {
                "weight": "12",
                "isFragile": "no"
              }
            },
            {
              "id": "4",
              "name": "Item4",
              "properties": {
                "weight": "12",
                "isFragile": "no"
              }
            }
          ]
        }
      ],
      "consignment": {
        "consignmentId": "ae21ebc2-8cfc-4566-bf07-b71cdfb37fb2",
        "customer": "Humongous Insurance",
        "deliveryDueDate": "2020-11-08T23:38:50.875258Z"
      }
    }
    

Consulta de datos profundamente anidados

Por último, cree una consulta de T-SQL que pueda encontrar datos profundamente anidados en una cadena JSON.

  1. Abra el menú contextual de la TestD tabla y vuelva a seleccionar Nueva consulta SQL .

  2. Ejecute esta consulta para expandir todos los niveles de datos anidados utilizando OUTER APPLY con envío.

    SELECT
        P.id,
        R.packageId,
        R.storageTemperature,
        R.highValue,
        G.id,
        G.name,
        H.weight,
        H.isFragile,
        Q.consignmentId,
        Q.customer,
        Q.deliveryDueDate 
    FROM
        OrdersDB_TestD as P CROSS APPLY OPENJSON(P.packages) WITH ( packageId varchar(100) '$.packageid',
        storageTemperature INT '$.storageTemperature',
        highValue varchar(100) '$.highValue',
        items nvarchar(MAX) AS JSON ) as R 
    OUTER APPLY OPENJSON (R.items) WITH (
        id varchar(100) '$.id',
        name varchar(100) '$.name',
        properties nvarchar(MAX) as JSON 
    ) as G OUTER APPLY OPENJSON(G.properties) WITH  (
        weight INT '$.weight',
        isFragile varchar(100) '$.isFragile'
    ) as H OUTER APPLY OPENJSON(P.consignment) WITH  (
        consignmentId varchar(200) '$.consignmentId',
        customer varchar(100) '$.customer',
        deliveryDueDate Date '$.deliveryDueDate'
    ) as Q 
    

    Nota:

    Al expandir packages, items se representa como JSON, que puede expandirse opcionalmente. La items propiedad tiene subpropiedades como JSOn, que también puede expandirse opcionalmente.

  3. Por último, ejecute una consulta que elija cuándo expandir niveles específicos de anidamiento.

    SELECT
        P.id,
        R.packageId,
        R.storageTemperature,
        R.highValue,
        R.items,
        Q.consignmentId,
        Q.customer,
        Q.deliveryDueDate 
    FROM
        OrdersDB_TestD as P CROSS APPLY OPENJSON(P.packages) WITH (
            packageId varchar(100) '$.packageid',
            storageTemperature INT '$.storageTemperature',
            highValue varchar(100) '$.highValue',
            items nvarchar(MAX) AS JSON
        ) as R 
    OUTER APPLY OPENJSON(P.consignment) WITH  (
        consignmentId varchar(200) '$.consignmentId',
        customer varchar(100) '$.customer',
        deliveryDueDate Date '$.deliveryDueDate'
    ) as Q 
    

    Nota:

    Los límites de propiedades para los niveles anidados no se aplican en esta experiencia de consulta T-SQL.