Aan de slag met SQL-query's

VAN TOEPASSING OP: SQL-API

In Azure Cosmos DB SQL API-accounts zijn er twee manieren om gegevens te lezen:

Puntlezen: u kunt een sleutel/waarde-zoekactie op één item-id en partitiesleutel doen. De combinatie van item-id en partitiesleutel is de sleutel en het item zelf is de waarde. Voor een document van 1 kB kost een punt meestal 1 aanvraageenheid met een latentie van minder dan 10 ms. Puntlezen retourneren één item.

Hier zijn enkele voorbeelden van hoe u Punt-leess kunt doen met elke SDK:

SQL query's: u kunt query's uitvoeren op gegevens door query's te schrijven met behulp van de Structured Query Language (SQL) als JSON-querytaal. Query's kosten altijd ten minste 2,3 aanvraageenheden en hebben over het algemeen een hogere en meer variabele latentie dan puntlezen. Query's kunnen veel items retourneren.

De meeste leeszware werkbelastingen op Azure Cosmos DB gebruiken een combinatie van zowel punt-lees- als SQL query's. Als u slechts één item hoeft te lezen, zijn puntlezen goedkoper en sneller dan query's. Puntlezen hoeven de query-engine niet te gebruiken om toegang te krijgen tot gegevens en kunnen de gegevens rechtstreeks lezen. Het is natuurlijk niet mogelijk dat alle workloads alleen gegevens lezen met behulp van puntlezen. Ondersteuning van SQL als querytaal en schema-agnostische indexering bieden daarom een flexibelere manier om toegang te krijgen tot uw gegevens.

Hier zijn enkele voorbeelden van hoe u query's SQL elke SDK:

In de rest van dit document ziet u hoe u aan de slag gaat met het SQL query's in Azure Cosmos DB. SQL query's kunnen worden uitgevoerd via de SDK of Azure Portal.

Upload voorbeeldgegevens

Open in SQL API Cosmos DB-account de Data Explorer om een container met de naam te Families maken. Nadat de container is gemaakt, gebruikt u de gegevensstructurenbrowser om deze te zoeken en te openen. In uw Families container ziet u de optie direct onder de naam van de Items container. Als u deze optie opent, ziet u een knop in de menubalk in het midden van het scherm om een 'Nieuw item' te maken. U gebruikt deze functie om de onderstaande JSON-items te maken.

JSON-items maken

De volgende twee JSON-items zijn documenten over de familie Andersen en Wakefield. Ze omvatten ouders, kinderen en hun huisdieren, adres en registratiegegevens.

Het eerste item heeft tekenreeksen, getallen, Booleaanse eigenschappen, matrices en geneste eigenschappen:

{
  "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
}

In het tweede item wordt givenName en gebruikt in plaats van en 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
}

Een query uitvoeren op de JSON-items

Probeer enkele query's uit op de JSON-gegevens om een aantal belangrijke aspecten van de Azure Cosmos DB querytaal van SQL te begrijpen.

De volgende query retourneert de items waar het id veld overeenkomt met AndersenFamily . Omdat het een SELECT * query is, is de uitvoer van de query het volledige JSON-item. Zie SELECT-instructie voor meer informatie over SELECT-syntaxis.

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

De queryresultaten zijn:

    [{
        "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
    }]

Met de volgende query wordt de JSON-uitvoer opnieuw vorm geven. De query projecteert een nieuw JSON-object met twee geselecteerde velden, en , wanneer Family de adres plaats hetzelfde is als de Name City staat. "NY, NY" komt overeen met dit geval.

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

De queryresultaten zijn:

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

De volgende query retourneert alle opgegeven namen van kinderen in de familie waarvan id overeenkomt met , geordend op WakefieldFamily plaats.

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

U ziet deze uitvoer:

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

Opmerkingen

In de voorgaande voorbeelden worden verschillende aspecten van de Cosmos DB querytaal:

  • Omdat SQL API werkt op JSON-waarden, worden entiteiten in de vorm van een boomstructuur gebruikt in plaats van rijen en kolommen. U kunt verwijzen naar de structuurknooppunten op elke willekeurige diepte, zoals , vergelijkbaar met de tweedelige Node1.Node2.Node3…..Nodem verwijzing van <table>.<column> in ANSI-SQL.

  • Omdat de querytaal werkt met schemaloze gegevens, moet het typesysteem dynamisch worden gebonden. Een expressie kan verschillende typen voor verschillende elementen opleveren. Het resultaat van een query is een geldige JSON-waarde, maar is niet gegarandeerd van een vast schema.

  • Azure Cosmos DB biedt alleen ondersteuning voor JSON-items. Dit betekent dat het typesysteem en expressies alleen geschikt zijn voor JSON-typen. Zie de JSON-specificatie voor meer informatie.

  • Een Cosmos-container is een schemaloze verzameling JSON-items. De relaties binnen en tussen containeritems worden impliciet vastgelegd door insluiting, niet door relaties tussen primaire sleutels en externe sleutels. Deze functie is belangrijk voor de joins tussen items die worden beschreven in Joins in Azure Cosmos DB.

Volgende stappen