Instrukcje: wykonywanie zapytań dotyczących zagnieżdżonych danych w dublowanych bazach danych usługi Microsoft Fabric z usługi Azure Cosmos DB (wersja zapoznawcza)
Użyj dublowanej bazy danych w usłudze Microsoft Fabric, aby wysyłać zapytania o zagnieżdżone dane JSON pochodzące z usługi Azure Cosmos DB for NoSQL.
Ważne
Dublowanie dla usługi Azure Cosmos DB jest obecnie dostępne w wersji zapoznawczej. Obciążenia produkcyjne nie są obsługiwane w wersji zapoznawczej. Obecnie obsługiwane są tylko konta usługi Azure Cosmos DB for NoSQL.
Wymagania wstępne
- Istniejące konto usługi Azure Cosmos DB for NoSQL.
- Jeśli nie masz subskrypcji platformy Azure, wypróbuj bezpłatnie usługę Azure Cosmos DB dla noSQL.
- Jeśli masz istniejącą subskrypcję platformy Azure, utwórz nowe konto usługi Azure Cosmos DB for NoSQL.
- Istniejąca pojemność sieci szkieletowej. Jeśli nie masz istniejącej pojemności, uruchom wersję próbną usługi Fabric.
- Konto usługi Azure Cosmos DB for NoSQL musi być skonfigurowane pod kątem dublowania sieci szkieletowej. Aby uzyskać więcej informacji, zobacz wymagania dotyczące konta.
Napiwek
W publicznej wersji zapoznawczej zaleca się użycie kopii testowej lub deweloperskiej istniejących danych usługi Azure Cosmos DB, które można szybko odzyskać z kopii zapasowej.
Tworzenie zagnieżdżonych danych w źródłowej bazie danych
Utwórz elementy JSON w ramach konta usługi Azure Cosmos DB for NoSQL zawierające różne poziomy zagnieżdżonych danych JSON.
Przejdź do konta usługi Azure Cosmos DB w witrynie Azure Portal.
Wybierz pozycję Eksplorator danych z menu zasobów.
Użyj polecenia + Nowy kontener , aby utworzyć nowy kontener. W tym przewodniku nadaj kontenerowi
TestC
nazwę . Odpowiadająca nazwa bazy danych jest dowolna.Użyj opcji + Nowy element wiele razy, aby utworzyć i zapisać te pięć elementów 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" }
Konfigurowanie dublowania i wymagań wstępnych
Konfigurowanie dublowania dla bazy danych Azure Cosmos DB for NoSQL. Jeśli nie masz pewności, jak skonfigurować dublowanie, zapoznaj się z samouczkiem dotyczącym konfigurowania dublowanej bazy danych.
Przejdź do portalu sieci szkieletowej.
Utwórz nowe połączenie i dublowaną bazę danych przy użyciu poświadczeń konta usługi Azure Cosmos DB.
Poczekaj, aż replikacja zakończy początkową migawkę danych.
Wykonywanie zapytań względem podstawowych zagnieżdżonych danych
Teraz użyj punktu końcowego analizy SQL, aby utworzyć zapytanie, które może obsługiwać proste zagnieżdżone dane JSON.
Przejdź do dublowanej bazy danych w portalu sieci szkieletowej.
Przełącz się z dublowanej usługi Azure Cosmos DB do punktu końcowego analizy SQL.
Otwórz menu kontekstowe dla tabeli testowej i wybierz pozycję Nowe zapytanie SQL.
Uruchom to zapytanie, aby rozwinąć tablicę
items
za pomocą poleceniaOPENJSON
. To zapytanie używaOUTER APPLY
funkcji dołączania dodatkowych elementów, które mogą nie mieć tablicy elementów.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
Napiwek
Podczas wybierania typów danych w
OPENJSON
programie użycievarchar(max)
dla typów ciągów może pogorszyć wydajność zapytań. Zamiast tego użyjvarchar(n)
whern
może być dowolną liczbą. Im niższan
jest, tym bardziej prawdopodobna będzie lepsza wydajność zapytań.Użyj
CROSS APPLY
w następnym zapytaniu, aby wyświetlić tylko elementy z tablicą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
Tworzenie głęboko zagnieżdżonych danych
Aby opierać się na tym przykładzie zagnieżdżonych danych, dodajmy przykład głęboko zagnieżdżonych danych.
Przejdź do konta usługi Azure Cosmos DB w witrynie Azure Portal.
Wybierz pozycję Eksplorator danych z menu zasobów.
Użyj polecenia + Nowy kontener , aby utworzyć nowy kontener. W tym przewodniku nadaj kontenerowi
TestD
nazwę . Odpowiadająca nazwa bazy danych jest dowolna.Użyj opcji + Nowy element wiele razy, aby utworzyć i zapisać ten element 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" } }
Wykonywanie zapytań dotyczących głęboko zagnieżdżonych danych
Na koniec utwórz zapytanie T-SQL, które może znaleźć dane głęboko zagnieżdżone w ciągu JSON.
Otwórz menu kontekstowe
TestD
tabeli i ponownie wybierz pozycję Nowe zapytanie SQL.Uruchom to zapytanie, aby rozwinąć wszystkie poziomy zagnieżdżonych danych przy użyciu
OUTER APPLY
polecenia z przesyłką.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
Uwaga
Podczas rozwijania
packages
items
parametru jest reprezentowany jako kod JSON, który można opcjonalnie rozwinąć. Właściwośćitems
ma właściwości podrzędne jako JSOn, które również mogą opcjonalnie rozwinąć.Na koniec uruchom zapytanie, które wybiera, kiedy rozszerzyć określone poziomy zagnieżdżania.
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
Uwaga
Limity właściwości dla poziomów zagnieżdżonych nie są wymuszane w tym środowisku zapytania T-SQL.