วิธีการ: คิวรีข้อมูลที่ซ้อนกันใน Microsoft Fabric มิเรอร์ฐานข้อมูลจาก Azure Cosmos DB (ตัวอย่าง)
ใช้ฐานข้อมูลมิเรอร์ใน Microsoft Fabric เพื่อคิวรีข้อมูล JSON ที่ซ้อนกันจาก Azure Cosmos DB สําหรับ NoSQL
สำคัญ
มิเรอร์สําหรับ Azure Cosmos DB ในขณะนี้อยู่ในตัวอย่าง ปริมาณงานการผลิตไม่ได้รับการสนับสนุนในระหว่างการแสดงตัวอย่าง ในปัจจุบัน รองรับเฉพาะ Azure Cosmos DB สําหรับบัญชี NoSQL เท่านั้น
ข้อกำหนดเบื้องต้น
- Azure Cosmos DB ที่มีอยู่สําหรับบัญชี NoSQL
- ถ้าคุณไม่มีการสมัครใช้งาน Azure ลองใช้ Azure Cosmos DB สําหรับ NoSQL ฟรี
- ถ้าคุณมีการสมัครใช้งาน Azure อยู่ ให้ สร้าง Azure Cosmos DB ใหม่สําหรับบัญชี NoSQL
- ความจุ Fabric ที่มีอยู่ ถ้าคุณไม่มีความจุที่มีอยู่ ให้ เริ่มการทดลองใช้ Fabric
- Azure Cosmos DB สําหรับบัญชี NoSQL ต้องได้รับการกําหนดค่าสําหรับการมิเรอร์ Fabric สําหรับข้อมูลเพิ่มเติม ดู ข้อกําหนดของบัญชี
เคล็ดลับ
ในระหว่างการแสดงตัวอย่างสาธารณะ ขอแนะนําให้ใช้สําเนาการทดสอบหรือการพัฒนาของข้อมูล Azure Cosmos DB ที่มีอยู่ของคุณที่สามารถกู้คืนได้อย่างรวดเร็วจากการสํารองข้อมูล
สร้างข้อมูลที่ซ้อนกันภายในฐานข้อมูลต้นทาง
สร้างรายการ JSON ภายใน Azure Cosmos DB ของคุณสําหรับบัญชี NoSQL ที่ประกอบด้วยระดับที่แตกต่างกันของข้อมูล JSON ที่ซ้อนกัน
นําทางไปยังบัญชี Azure Cosmos DB ของคุณใน พอร์ทัล Azure
เลือก Data Explorer จากเมนูทรัพยากร
ใช้ + คอนเทนเนอร์ ใหม่ เพื่อสร้างคอนเทนเนอร์ใหม่ สําหรับคําแนะนํานี้ ให้ตั้งชื่อคอนเทนเนอร์
TestC
ชื่อฐานข้อมูลที่สอดคล้องกันเป็นชื่อตามอําเภอใจใช้ตัวเลือก + รายการใหม่ หลายครั้งเพื่อสร้างและบันทึกรายการ 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 ถ้าคุณไม่แน่ใจเกี่ยวกับวิธีการกําหนดค่ามิเรอร์ ดูที่ บทช่วยสอนกําหนดค่าฐานข้อมูลที่มิเรอร์
นําทางไปยัง พอร์ทัล Fabric
สร้างการเชื่อมต่อใหม่และฐานข้อมูลที่มิเรอร์โดยใช้ข้อมูลประจําตัวของบัญชี Azure Cosmos DB ของคุณ
รอให้การจําลองแบบเสร็จสิ้นสแนปช็อตเริ่มต้นของข้อมูล
ข้อมูลแบบซ้อนกันของคิวรีพื้นฐาน
ตอนนี้ ใช้จุดสิ้นสุดการวิเคราะห์ SQL เพื่อสร้างคิวรีที่สามารถจัดการข้อมูล JSON ที่ซ้อนกันอย่างง่าย
นําทางไปยังฐานข้อมูลที่มิเรอร์ในพอร์ทัล Fabric
เปลี่ยนจาก Mirrored Azure Cosmos DB เป็น จุดสิ้นสุดการวิเคราะห์ SQL
เปิดเมนูบริบทสําหรับ ตารางทดสอบ และเลือก คิวรี SQL ใหม่
เรียกใช้คิวรีนี้เพื่อขยายใน
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)
whern
อาจเป็นตัวเลขใดก็ได้ ยิ่งต่ํากว่าn
โอกาสที่คุณจะเห็นประสิทธิภาพของคิวรีดียิ่งขึ้นใช้
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
สร้างข้อมูลที่ซ้อนกันลึก
เมื่อต้องสร้างบนตัวอย่างข้อมูลที่ซ้อนกันนี้ มาเพิ่มตัวอย่างข้อมูลที่ซ้อนกันลึกกัน
นําทางไปยังบัญชี Azure Cosmos DB ของคุณใน พอร์ทัล Azure
เลือก Data Explorer จากเมนูทรัพยากร
ใช้ + คอนเทนเนอร์ ใหม่ เพื่อสร้างคอนเทนเนอร์ใหม่ สําหรับคําแนะนํานี้ ให้ตั้งชื่อคอนเทนเนอร์
TestD
ชื่อฐานข้อมูลที่สอดคล้องกันเป็นชื่อตามอําเภอใจใช้ตัวเลือก + รายการใหม่ หลายครั้งเพื่อสร้างและบันทึกรายการ 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 ได้
เปิดเมนูบริบทสําหรับ
TestD
ตารางและเลือก คิวรี SQL ใหม่ อีกครั้งเรียกใช้คิวรีนี้เพื่อขยายข้อมูลซ้อนทุกระดับโดยใช้
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
หมายเหตุ
เมื่อขยาย
packages
items
จะแสดงเป็น JSON ซึ่งสามารถเลือกขยายได้ คุณสมบัติitems
มีคุณสมบัติย่อยเป็น JSOn ซึ่งสามารถเลือกที่จะขยายได้สุดท้าย ให้เรียกใช้คิวรีที่เลือกว่าจะขยายการซ้อนในระดับที่เฉพาะเจาะจงเมื่อใด
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 นี้