Introduzione alle query SQL

SI APPLICA A: API SQL

In Azure Cosmos database SQL account API, esistono due modi per leggere i dati:

Operazioni di lettura in punti: è 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, le operazioni di lettura point in genere costano 1 unità richiesta con una latenza inferiore a 10 ms. Le operazioni di lettura dei punti restituiscono un singolo elemento.

Ecco alcuni esempi di come eseguire le operazioni di lettura point con ogni SDK:

SQL query: è possibile eseguire query sui dati scrivendo query usando 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 variabile rispetto alle operazioni di lettura dei punti. Le query possono restituire molti elementi.

La maggior parte dei carichi di lavoro con elevato utilizzo di Cosmos azure usa una combinazione di operazioni di lettura di punti SQL query. Se è sufficiente leggere un singolo elemento, le operazioni di lettura a punti sono più convenienti e veloci rispetto alle query. Le operazioni di lettura dei punti non devono usare il motore di query per accedere ai dati e possono leggere i dati direttamente. Naturalmente, non è possibile che tutti i carichi di lavoro leggono esclusivamente i dati usando le operazioni di lettura dei punti, quindi il supporto di SQL come linguaggio di query e di indicizzazione indipendente da schema offre un modo più flessibile per accedere ai dati.

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

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

Upload dati di esempio

Nell'account SQL'API Cosmos database 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. Nel Families contenitore verrà visualizzata Items l'opzione sotto il nome del contenitore. Aprire questa opzione e nella barra dei menu al centro dello schermo verrà visualizzato un pulsante per creare un nuovo elemento. Questa funzionalità verrà utilizzata per creare gli elementi JSON seguenti.

Creare elementi JSON

I 2 elementi JSON seguenti sono documenti sulle famiglie Andersen e Wakefield. Includono genitori, figli e animali domestici, indirizzo e informazioni di registrazione.

Il primo elemento ha 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 invece di e familyName firstName 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 Cosmos database SQL database.

La query seguente restituisce gli elementi in cui id il 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 con due campi selezionati, e , quando la città dell'indirizzo è Family Name uguale allo City 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 degli elementi figlio della famiglia le cui id corrispondenze WakefieldFamily sono ordinate 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 Cosmos DATABASE:

  • Poiché SQL'API funziona su valori JSON, gestisce entità a forma di albero anziché righe e colonne. È possibile fare riferimento ai nodi della struttura ad albero a qualsiasi profondità arbitraria, ad esempio , in modo simile al riferimento in due parti di Node1.Node2.Node3…..Nodem <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 Cosmos contenitore è una raccolta di elementi JSON senza schema. Le relazioni all'interno e tra gli elementi del contenitore vengono acquisite in modo implicito dal contenimento, non dalle relazioni di chiave primaria e chiave esterna. Questa funzionalità è importante per i join tra elementi descritti in Join in Azure Cosmos DB.

Passaggi successivi