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 enskilt objekt-ID och partitionsnyckel. Kombinationen objekt-ID och partitionsnyckel är nyckeln och själva objektet är värdet. För ett dokument på 1 kB kostar punktläsning vanligtvis 1 enhet för begäran med en svarstid under 10 ms. Punktläsningar returnerar ett enskilt objekt.
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 ett JSON-frågespråk. Frågor kostar alltid minst 2,3 enheter för begä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 på Azure Cosmos DB använder en kombination av både punktläsningar och SQL frågor. Om du bara behöver läsa ett enskilt 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 exklusivt läsa data med punktläsningar, så stöd för SQL som frågespråk och schemaoberoende indexering ger ett mer flexibelt sätt att komma åt dina data.
Här följer några exempel på hur du 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.
Upload exempeldata
I ditt SQL API Cosmos DB konto öppnar du Datautforskaren för att skapa en container med namnet Families . När containern har skapats använder du datastrukturer-webbläsaren för att hitta och öppna den. I Families containern visas alternativet Items direkt under namnet på containern. Öppna det här alternativet så ser du en knapp i menyraden i mitten av 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 två JSON-objekt är dokument om familjerna Andersen och Wakefield. De innehåller information om föräldrar, barn och husdjur, adress och registrering.
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 i stället för och 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
}
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 id fältet 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 projekterar ett nytt JSON-objekt med två markerade fält, och , när Family Name City adressstad är samma som delstaten. "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å barn i familjen vars matchar id WakefieldFamily , sorterade efter ort.
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
I föregående exempel visas flera aspekter av Cosmos DB frågespråket:
Eftersom SQL-API:et fungerar på JSON-värden hanterar det trädformade entiteter i stället för rader och kolumner. Du kan referera till trädnoderna på godtyckligt djup, till exempel , som liknar referensen i två delar för
Node1.Node2.Node3…..Nodem<table>.<column>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 av 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 fångas implicit av inneslutning, inte av primärnyckels- och främmande nyckelrelationer. Den här funktionen är viktig för de intraobjektkopplingar som beskrivs i Kopplingar i Azure Cosmos DB.
Nästa steg
- Introduktion till Azure Cosmos DB
- Azure Cosmos DB .NET-exempel
- SELECT-sats
- Försöker du göra kapacitetsplanering för en migrering till Azure Cosmos DB? Du kan använda information om ditt befintliga databaskluster för kapacitetsplanering.
- Om allt du vet är antalet virtuella kärnor och servrar i ditt befintliga databaskluster kan du läsa om att uppskatta enheter för programbegäran med hjälp av virtuella kärnor eller virtuella processorer
- Om du känner till vanliga begärandefrekvenser för din aktuella databasarbetsbelastning kan du läsa om att uppskatta enheter för programbegäran Azure Cosmos DB kapacitetsplaneraren