Komma igång med SQL-frågor

GÄLLER FÖR: SQL API

I Azure Cosmos DB SQL API-konton finns det två sätt att läsa data:

Punktläsningar – Du kan göra en nyckel/värde-sökning på ett enda objekt-ID och en partitionsnyckel. Objekt-ID och partitionsnyckelkombination är nyckeln och själva objektet är värdet. För ett dokument på 1 kB kostar punktläsningar vanligtvis 1 begärandeenhet med en svarstid under 10 ms. Punktläsningar returnerar ett enda helt objekt, inte ett partiellt objekt eller ett visst fält.

Här är några exempel på hur du gör Punktläsningar med varje SDK:

SQL-frågor – Du kan fråga efter data genom att skriva frågor med hjälp av Structured Query Language (SQL) som JSON-frågespråk. Frågor kostar alltid minst 2,3 enheter för begäranden och har i allmänhet en högre och mer variabel svarstid än punktläsningar. Frågor kan returnera många objekt.

De flesta läsintensiva arbetsbelastningar i Azure Cosmos DB använder en kombination av både punktläsningar och SQL-frågor. Om du bara behöver läsa ett enda objekt är punktläsningar billigare och snabbare än frågor. Punktläsningar behöver inte använda frågemotorn för att komma åt data och kan läsa data direkt. Naturligtvis är det inte möjligt för alla arbetsbelastningar att enbart läsa data med hjälp av punktläsningar, så stöd för SQL som frågespråk och schemaagnostisk indexering ger ett mer flexibelt sätt att komma åt dina data.

Här är några exempel på hur du gör SQL-frågor med varje SDK:

Resten av det här dokumentet visar hur du kommer igång med att skriva SQL-frågor i Azure Cosmos DB. SQL-frågor kan köras via antingen SDK eller Azure Portal.

Ladda upp exempeldata

I ditt SQL API Cosmos DB-konto öppnar du Data Explorer för att skapa en container med namnet Families. När containern har skapats använder du webbläsaren datastrukturer för att hitta och öppna den. Families I containern visas Items alternativet precis under namnet på containern. Öppna det här alternativet så visas en knapp i menyraden mitt på skärmen för att skapa ett nytt objekt. Du använder den här funktionen för att skapa JSON-objekten nedan.

Skapa JSON-objekt

Följande 2 JSON-objekt är dokument om familjerna Andersen och Wakefield. De inkluderar föräldrar, barn och deras husdjur, adress och registreringsinformation.

Det första objektet har strängar, tal, booleska värden, matriser och kapslade egenskaper:

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

Det andra objektet använder givenName och familyName i stället för firstName och 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
}

Fråga JSON-objekten

Prova några frågor mot JSON-data för att förstå några av de viktigaste aspekterna av Azure Cosmos DB:s SQL-frågespråk.

Följande fråga returnerar de objekt där fältet id matchar AndersenFamily. Eftersom det är en SELECT * fråga är frågans utdata det fullständiga JSON-objektet. Mer information om SELECT-syntax finns i SELECT-instruktionen.

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

Frågeresultaten är:

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

Följande fråga formaterar om JSON-utdata till en annan form. Frågan projicerar ett nytt JSON-objekt Family med två markerade fält och CityName , när adressorten är samma som tillståndet. "NY, NY" matchar det här fallet.

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

Frågeresultaten är:

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

Följande fråga returnerar alla förnamn på underordnade i familjen vars id matchningar WakefieldFamily, ordnade efter stad.

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

Resultatet är:

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

Kommentarer

Föregående exempel visar flera aspekter av Cosmos DB-frågespråket:

  • Eftersom SQL API fungerar med JSON-värden hanterar det trädformade entiteter i stället för rader och kolumner. Du kan referera till trädnoderna på valfritt djup, till exempel , ungefär som Node1.Node2.Node3…..Nodemreferensen <table>.<column> i två delar i ANSI SQL.

  • Eftersom frågespråket fungerar med schemalösa data måste typsystemet bindas dynamiskt. Samma uttryck kan ge olika typer på olika objekt. Resultatet av en fråga är ett giltigt JSON-värde, men är inte garanterat ett fast schema.

  • Azure Cosmos DB stöder endast strikta JSON-objekt. Typsystem och uttryck är begränsade till att endast hantera JSON-typer. Mer information finns i JSON-specifikationen.

  • En Cosmos-container är en schemafri samling JSON-objekt. Relationerna inom och mellan containerobjekt samlas implicit in genom inneslutning, inte av primärnyckel och sekundärnyckelrelationer. Den här funktionen är viktig för de intraobjektkopplingar som beskrivs i Kopplingar i Azure Cosmos DB.

Nästa steg