Komma igång med SQL-frågor

GÄLLER FÖR: NoSQL

I Azure Cosmos DB för NoSQL-konton finns det två sätt att läsa data:

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

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

SQL-frågor – Du kan köra frågor mot 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 programbegäran och har i allmänhet en högre och mer varierande 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 ett frågespråk och schemaagnostisk indexering ger ett mer flexibelt sätt att komma åt dina data.

Här följer några exempel på hur du utfö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:t eller Azure-Portal.

Ladda upp exempeldata

I ditt API för NoSQL Azure Cosmos DB-kontot ö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 Items visas 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 Sql-frågespråket i Azure Cosmos DB.

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-instruktion.

    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å valda fält, Name och City, 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 angivna namn på underordnade i familjen vars id matchar 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 Azure Cosmos DB-frågespråket:

  • Eftersom API för NoSQL 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 Node1.Node2.Node3…..Nodem, ungefär som referensen <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 Azure Cosmos DB-container är en schemafri samling JSON-objekt. Relationerna inom och mellan containerobjekt registreras implicit av inneslutning, inte av primärnyckel- och sekundärnyckelrelationer. Den här funktionen är viktig för intraobjektkopplingar som beskrivs i Kopplingar i Azure Cosmos DB.

Nästa steg