Διαδικασία: Υποβολή ερωτημάτων σε ένθετα δεδομένα σε βάσεις δεδομένων κατοπτρισμού Microsoft Fabric από τη βάση δεδομένων Azure Cosmos

Χρησιμοποιήστε τη βάση δεδομένων ειδώλου στο Microsoft Fabric για να υποβάλετε ερώτημα ένθετα δεδομένα JSON που προέρχονται από τη βάση δεδομένων Azure Cosmos για NoSQL.

Προαπαιτούμενα

Φιλοδώρημα

Συνιστάται να χρησιμοποιήσετε ένα αντίγραφο δοκιμής ή ανάπτυξης των υπαρχόντων δεδομένων Azure Cosmos DB που μπορούν να ανακτηθούν γρήγορα από ένα αντίγραφο ασφαλείας.

Δημιουργία ένθετων δεδομένων μέσα στη βάση δεδομένων προέλευσης

Δημιουργήστε στοιχεία JSON εντός του λογαριασμού σας Azure Cosmos DB για NoSQL που περιέχουν διάφορα επίπεδα ένθετων δεδομένων JSON.

  1. Μεταβείτε στον λογαριασμό σας Azure Cosmos DB στην πύλη Azure.

  2. Επιλέξτε Εξερεύνηση δεδομένων από το μενού πόρων.

  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 για NoSQL. Εάν δεν είστε βέβαιοι για τον τρόπο ρύθμισης παραμέτρων κατοπτρισμού, ανατρέξτε στο πρόγραμμα εκμάθησης ρύθμισης παραμέτρων κατοπτρικής βάσης δεδομένων.

  1. Μεταβείτε στην πύλη Fabric.

  2. Δημιουργήστε μια νέα σύνδεση και κατοπτριζόμενη βάση δεδομένων χρησιμοποιώντας τα διαπιστευτήρια του λογαριασμού σας Azure Cosmos DB.

  3. Περιμένετε μέχρι την αναπαραγωγή για να ολοκληρώσετε το αρχικό στιγμιότυπο των δεδομένων.

Υποβολή ερωτήματος σε βασικά ένθετα δεδομένα

Τώρα, χρησιμοποιήστε το τελικό σημείο ανάλυσης SQL για να δημιουργήσετε ένα ερώτημα που μπορεί να χειριστεί απλά ένθετα δεδομένα JSON.

  1. Μεταβείτε στη βάση δεδομένων κατοπτρισμού στην πύλη Fabric.

  2. Μεταβείτε από το κατοπτριζόμενο 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) όπου 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-3 στο προηγούμενο παράδειγμα. Με το ίδιο σύνολο δεδομένων, μπορούμε να δημιουργήσουμε ένα ερώτημα για την ισοπέδωση των δεδομένων χωρίς να χρειάζεται να ορίσουμε ρητά το σχήμα.

  1. Εκτελέστε αυτό το ερώτημα για να αναπτύξετε τον items πίνακα χωρίς OPENJSON να ορίσετε το σχήμα. Αυτό ισοπεδώνει τον πίνακα στοιχείων κατά ένα επίπεδο διαχωρίζοντας κάθε ένθετο αντικείμενο σε μια νέα γραμμή.

    SELECT
        t.name,
        t.id,
        t.country,
        p.*
    FROM OrdersDB_TestC as t 
    CROSS APPLY OPENJSON(t.items) p
    
  2. Εκτελέστε αυτό το ερώτημα για να αναπτύξετε περαιτέρω τον items πίνακα χωρίς OPENJSON να ορίσετε το σχήμα. Αυτό ισοπεδώνει τον πίνακα στοιχείων δύο επίπεδα διαχωρίζοντας κάθε ιδιότητα σε κάθε ένθετο αντικείμενο σε μια νέα γραμμή.

    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
    

Δημιουργία βαθιά ένθετων δεδομένων

Για να βασιστούμε σε αυτό το παράδειγμα ένθετων δεδομένων, ας προσθέσουμε ένα παράδειγμα βαθιά ένθετων δεδομένων.

  1. Μεταβείτε στον λογαριασμό σας Azure Cosmos DB στην πύλη Azure.

  2. Επιλέξτε Εξερεύνηση δεδομένων από το μενού πόρων.

  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 
    

    Note

    Κατά την επέκταση packages, items αντιπροσωπεύεται ως 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 
    

    Note

    Τα όρια ιδιοτήτων για ένθετα επίπεδα δεν επιβάλλονται σε αυτήν την εμπειρία ερωτήματος T-SQL.