แชร์ผ่าน


วิธีการ: คิวรีข้อมูลที่ซ้อนกันใน Microsoft Fabric มิเรอร์ฐานข้อมูลจาก Azure Cosmos DB (ตัวอย่าง)

ใช้ฐานข้อมูลมิเรอร์ใน Microsoft Fabric เพื่อคิวรีข้อมูล JSON ที่ซ้อนกันจาก Azure Cosmos DB สําหรับ NoSQL

สำคัญ

มิเรอร์สําหรับ Azure Cosmos DB ในขณะนี้อยู่ในตัวอย่าง ปริมาณงานการผลิตไม่ได้รับการสนับสนุนในระหว่างการแสดงตัวอย่าง ในปัจจุบัน รองรับเฉพาะ Azure Cosmos DB สําหรับบัญชี NoSQL เท่านั้น

ข้อกำหนดเบื้องต้น

เคล็ดลับ

ในระหว่างการแสดงตัวอย่างสาธารณะ ขอแนะนําให้ใช้สําเนาการทดสอบหรือการพัฒนาของข้อมูล Azure Cosmos DB ที่มีอยู่ของคุณที่สามารถกู้คืนได้อย่างรวดเร็วจากการสํารองข้อมูล

สร้างข้อมูลที่ซ้อนกันภายในฐานข้อมูลต้นทาง

สร้างรายการ JSON ภายใน Azure Cosmos DB ของคุณสําหรับบัญชี NoSQL ที่ประกอบด้วยระดับที่แตกต่างกันของข้อมูล JSON ที่ซ้อนกัน

  1. นําทางไปยังบัญชี Azure Cosmos DB ของคุณใน พอร์ทัล Azure

  2. เลือก Data Explorer จากเมนูทรัพยากร

  3. ใช้ + คอนเทนเนอร์ ใหม่ เพื่อสร้างคอนเทนเนอร์ใหม่ สําหรับคําแนะนํานี้ ให้ตั้งชื่อคอนเทนเนอร์TestC ชื่อฐานข้อมูลที่สอดคล้องกันเป็นชื่อตามอําเภอใจ

  4. ใช้ตัวเลือก + รายการใหม่ หลายครั้งเพื่อสร้างและบันทึกรายการ 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"
    }
    

ตั้งค่าการมิเรอร์และสิ่งที่จําเป็นต้องมี

กําหนดค่าการมิเรอร์สําหรับ Azure Cosmos DB สําหรับฐานข้อมูล NoSQL ถ้าคุณไม่แน่ใจเกี่ยวกับวิธีการกําหนดค่ามิเรอร์ ดูที่ บทช่วยสอนกําหนดค่าฐานข้อมูลที่มิเรอร์

  1. นําทางไปยัง พอร์ทัล Fabric

  2. สร้างการเชื่อมต่อใหม่และฐานข้อมูลที่มิเรอร์โดยใช้ข้อมูลประจําตัวของบัญชี Azure Cosmos DB ของคุณ

  3. รอให้การจําลองแบบเสร็จสิ้นสแนปช็อตเริ่มต้นของข้อมูล

ข้อมูลแบบซ้อนกันของคิวรีพื้นฐาน

ตอนนี้ ใช้จุดสิ้นสุดการวิเคราะห์ SQL เพื่อสร้างคิวรีที่สามารถจัดการข้อมูล JSON ที่ซ้อนกันอย่างง่าย

  1. นําทางไปยังฐานข้อมูลที่มิเรอร์ในพอร์ทัล Fabric

  2. เปลี่ยนจาก Mirrored Azure Cosmos DB เป็น จุดสิ้นสุดการวิเคราะห์ SQL

    สกรีนช็อตของตัวเลือกเพื่อสลับระหว่างรายการในพอร์ทัล Fabric

  3. เปิดเมนูบริบทสําหรับ ตารางทดสอบ และเลือก คิวรี SQL ใหม่

  4. เรียกใช้คิวรีนี้เพื่อขยายในitemsอาร์เรย์ด้วยOPENJSON คิวรีนี้ใช้ OUTER APPLY เพื่อรวมรายการเพิ่มเติมที่อาจไม่มีอาร์เรย์รายการ

    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
    

    เคล็ดลับ

    เมื่อเลือกชนิดข้อมูลใน OPENJSONการใช้ varchar(max) สําหรับชนิดสตริงอาจทําให้ประสิทธิภาพของคิวรีแย่ลง แต่ให้ใช้ varchar(n) wher n อาจเป็นตัวเลขใดก็ได้ ยิ่งต่ํากว่า n โอกาสที่คุณจะเห็นประสิทธิภาพของคิวรีดียิ่งขึ้น

  5. ใช้ CROSS APPLY ในคิวรีถัดไปเพื่อแสดงรายการที่มี items อาร์เรย์เท่านั้น

    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 
    

สร้างข้อมูลที่ซ้อนกันลึก

เมื่อต้องสร้างบนตัวอย่างข้อมูลที่ซ้อนกันนี้ มาเพิ่มตัวอย่างข้อมูลที่ซ้อนกันลึกกัน

  1. นําทางไปยังบัญชี Azure Cosmos DB ของคุณใน พอร์ทัล Azure

  2. เลือก Data Explorer จากเมนูทรัพยากร

  3. ใช้ + คอนเทนเนอร์ ใหม่ เพื่อสร้างคอนเทนเนอร์ใหม่ สําหรับคําแนะนํานี้ ให้ตั้งชื่อคอนเทนเนอร์TestD ชื่อฐานข้อมูลที่สอดคล้องกันเป็นชื่อตามอําเภอใจ

  4. ใช้ตัวเลือก + รายการใหม่ หลายครั้งเพื่อสร้างและบันทึกรายการ 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"
      }
    }
    

ข้อมูลที่ซ้อนกันเชิงลึกของคิวรี

สุดท้าย ให้สร้างคิวรี T-SQL ที่สามารถค้นหาข้อมูลที่ซ้อนกันลึกในสตริง JSON ได้

  1. เปิดเมนูบริบทสําหรับ TestD ตารางและเลือก คิวรี SQL ใหม่ อีกครั้ง

  2. เรียกใช้คิวรีนี้เพื่อขยายข้อมูลซ้อนทุกระดับโดยใช้ OUTER APPLY การส่งมอบ

    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 
    

    หมายเหตุ

    เมื่อขยาย packagesitems จะแสดงเป็น JSON ซึ่งสามารถเลือกขยายได้ คุณสมบัติ items มีคุณสมบัติย่อยเป็น JSOn ซึ่งสามารถเลือกที่จะขยายได้

  3. สุดท้าย ให้เรียกใช้คิวรีที่เลือกว่าจะขยายการซ้อนในระดับที่เฉพาะเจาะจงเมื่อใด

    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 
    

    หมายเหตุ

    ขีดจํากัดคุณสมบัติสําหรับระดับที่ซ้อนกันจะไม่ถูกบังคับใช้ในประสบการณ์คิวรี T-SQL นี้