Introduzione alle query SQL

SI APPLICA A: NoSQL

In Azure Cosmos DB per gli account NoSQL è possibile leggere i dati in due modi:

Letture punto : è possibile eseguire una ricerca chiave/valore su un singolo ID elemento e una chiave di partizione. La combinazione di ID elemento e chiave di partizione è la chiave e l'elemento stesso è il valore. Per un documento di 1 KB, il punto legge in genere 1 unità richiesta con una latenza inferiore a 10 ms. Le letture punto restituiscono un singolo elemento intero, non un elemento parziale o un campo specifico.

Ecco alcuni esempi di come eseguire letture point con ogni SDK:

Query SQL: è possibile eseguire query sui dati scrivendo query usando il Structured Query Language (SQL) come linguaggio di query JSON. Le query costano sempre almeno 2,3 unità richiesta e, in generale, avranno una latenza più elevata e più variabile rispetto alle letture punto. Le query possono restituire molti elementi.

La maggior parte dei carichi di lavoro con intensa attività di lettura in Azure Cosmos DB usa una combinazione di letture di punti e query SQL. Se è sufficiente leggere un singolo elemento, le letture dei punti sono più economiche e veloci rispetto alle query. Le letture dei punti non devono usare il motore di query per accedere ai dati e possono leggere direttamente i dati. Naturalmente, non è possibile che tutti i carichi di lavoro leggano esclusivamente i dati usando le letture dei punti, quindi il supporto di SQL come linguaggio di query e indicizzazione indipendente dallo schema offre un modo più flessibile per accedere ai dati.

Ecco alcuni esempi di come eseguire query SQL con ogni SDK:

Il resto di questo documento illustra come iniziare a scrivere query SQL in Azure Cosmos DB. Le query SQL possono essere eseguite tramite l'SDK o portale di Azure.

Caricare dati di esempio

Nell'account api per NoSQL di Azure Cosmos DB aprire il Esplora dati per creare un contenitore denominato Families. Dopo aver creato il contenitore, usare il browser delle strutture di dati per trovarlo e aprirlo. Families Nel contenitore verrà visualizzata l'opzione Items immediatamente sotto il nome del contenitore. Aprire questa opzione e nella barra dei menu al centro della schermata verrà visualizzato un pulsante per creare un nuovo elemento. Questa funzionalità verrà usata per creare gli elementi JSON seguenti.

Creare elementi JSON

I 2 elementi JSON seguenti sono documenti relativi alle famiglie Anderson e Wakefield. Includono genitori, bambini e loro animali domestici, indirizzo e informazioni di registrazione.

Il primo elemento include stringhe, numeri, valori booleani, matrici e proprietà annidate:

{
  "id": "AndersenFamily",
  "lastName": "Andersen",
  "parents": [
     { "firstName": "Thomas" },
     { "firstName": "Mary Kay"}
  ],
  "children": [
     {
         "firstName": "Henriette Thaulow",
         "gender": "female",
         "grade": 5,
         "pets": [{ "givenName": "Fluffy" }]
     }
  ],
  "address": { "state": "WA", "county": "King", "city": "Seattle" },
  "creationDate": 1431620472,
  "isRegistered": true
}

Il secondo elemento usa givenName e familyName invece di firstName e lastName:

{
  "id": "WakefieldFamily",
  "parents": [
      { "familyName": "Wakefield", "givenName": "Robin" },
      { "familyName": "Miller", "givenName": "Ben" }
  ],
  "children": [
      {
        "familyName": "Merriam",
        "givenName": "Jesse",
        "gender": "female",
        "grade": 1,
        "pets": [
            { "givenName": "Goofy" },
            { "givenName": "Shadow" }
        ]
      },
      {
        "familyName": "Miller",
         "givenName": "Lisa",
         "gender": "female",
         "grade": 8 }
  ],
  "address": { "state": "NY", "county": "Manhattan", "city": "NY" },
  "creationDate": 1431620462,
  "isRegistered": false
}

Eseguire query sugli elementi JSON

Provare alcune query sui dati JSON per comprendere alcuni degli aspetti chiave del linguaggio di query SQL di Azure Cosmos DB.

La query seguente restituisce gli elementi in cui il id campo corrisponde a AndersenFamily. Poiché si tratta di una SELECT * query, l'output della query è l'elemento JSON completo. Per altre informazioni sulla sintassi SELECT, vedere Istruzione SELECT.

    SELECT *
    FROM Families f
    WHERE f.id = "AndersenFamily"

I risultati della query sono:

    [{
        "id": "AndersenFamily",
        "lastName": "Andersen",
        "parents": [
           { "firstName": "Thomas" },
           { "firstName": "Mary Kay"}
        ],
        "children": [
           {
               "firstName": "Henriette Thaulow", "gender": "female", "grade": 5,
               "pets": [{ "givenName": "Fluffy" }]
           }
        ],
        "address": { "state": "WA", "county": "King", "city": "Seattle" },
        "creationDate": 1431620472,
        "isRegistered": true
    }]

La query seguente riformatta l'output JSON in una forma diversa. La query proietta un nuovo oggetto JSON Family con due campi Name selezionati e City, quando la città dell'indirizzo corrisponde allo stato. "NY, NY" corrisponde a questo caso.

    SELECT {"Name":f.id, "City":f.address.city} AS Family
    FROM Families f
    WHERE f.address.city = f.address.state

I risultati della query sono:

    [{
        "Family": {
            "Name": "WakefieldFamily",
            "City": "NY"
        }
    }]

La query seguente restituisce tutti i nomi specificati di elementi figlio nella famiglia i cui id corrisponde a WakefieldFamily, ordinati in base alla città.

    SELECT c.givenName
    FROM Families f
    JOIN c IN f.children
    WHERE f.id = 'WakefieldFamily'
    ORDER BY f.address.city ASC

I risultati sono:

    [
      { "givenName": "Jesse" },
      { "givenName": "Lisa"}
    ]

Commenti

Gli esempi precedenti illustrano diversi aspetti del linguaggio di query di Azure Cosmos DB:

  • Poiché l'API per NoSQL funziona sui valori JSON, gestisce le entità a forma di albero anziché le righe e le colonne. È possibile fare riferimento ai nodi della struttura ad albero in qualsiasi profondità arbitraria, ad Node1.Node2.Node3…..Nodemesempio , analogamente al riferimento in due parti di <table>.<column> in ANSI SQL.

  • Poiché il linguaggio di query funziona con dati senza schema, il sistema dei tipi deve essere associato in modo dinamico. La stessa espressione potrebbe produrre tipi differenti per elementi differenti. Il risultato di una query è un valore JSON valido, ma non è garantito che sia di uno schema fisso.

  • Cosmos DB supporta solo gli elementi JSON completi. Il sistema di tipi e le espressioni sono quindi limitati all'interazione esclusiva con i tipi JSON. Per altre informazioni, vedere le specifiche JSON.

  • Un contenitore Azure Cosmos DB è una raccolta senza schema di elementi JSON. Le relazioni all'interno e tra gli elementi contenitore vengono acquisite in modo implicito dal contenimento, non dalle relazioni chiave primaria e di chiave esterna. Questa funzionalità è importante per i join all'interno dell'elemento descritti in Join in Azure Cosmos DB.

Passaggi successivi