Getting started with queries (Introdução às consultas)
APLICA-SE A: NoSQL
No Azure Cosmos DB para contas NoSQL, existem duas formas de ler dados:
- Leituras de pontos
- Pode fazer uma pesquisa de chave/valor num único ID de item e chave de partição. O ID do item e a combinação da chave de partição são a chave e o item em si é o valor. Para um documento de 1 KB, as leituras de pontos normalmente custam uma unidade de pedido com uma latência inferior a 10 ms. As leituras de pontos devolvem um único item inteiro, não um item parcial ou um campo específico.
- Eis alguns exemplos de como fazer leituras de pontos com cada SDK:
- Consultas
- Pode consultar dados ao escrever consultas com o linguagem SQL (Structured Query Language) (SQL) como uma linguagem de consulta JSON. As consultas custam sempre, pelo menos, 2,3 unidades de pedido e, em geral, têm uma latência mais elevada e mais variável do que as leituras de pontos. As consultas podem devolver muitos itens.
- A maioria das cargas de trabalho de leitura intensiva no Azure Cosmos DB utilizam uma combinação de leituras e consultas de pontos. Se apenas precisar de ler um único item, as leituras de pontos são mais baratas e rápidas do que as consultas. As leituras de pontos não precisam de utilizar o motor de consulta para aceder aos dados e podem ler os dados diretamente. Não é possível que todas as cargas de trabalho leiam exclusivamente dados através de leituras de pontos, pelo que o suporte de uma linguagem de consulta personalizada e de indexação agnóstica de esquema proporcionam uma forma mais flexível de aceder aos seus dados.
- Eis alguns exemplos de como fazer consultas com cada SDK:
O resto deste artigo mostra como começar a escrever consultas no Azure Cosmos DB. as consultas podem ser executadas através do SDK ou do portal do Azure.
Carregar dados de exemplo
Na sua API para a conta do Azure Cosmos DB no NoSQL, utilize o Data Explorer para criar um contentor chamado products
. Depois de o contentor ser criado, utilize o browser de estruturas de dados para expandir o products
contentor. Por fim, selecione Itens.
A barra de menus deverá agora ter a opção Novo Item . Utilize esta opção para criar os itens JSON neste artigo.
Dica
Para este guia rápido, pode utilizar /id
como chave de partição. Para um contentor do mundo real, deve considerar a carga de trabalho geral ao selecionar uma estratégia de chave de partição. Para obter mais informações, veja criação de partições e dimensionamento horizontal.
Criar itens JSON
Estes dois itens JSON representam dois produtos de exemplo da AdventureWorks. Incluem informações sobre o produto, o fabricante e as etiquetas de metadados. Cada item inclui propriedades aninhadas, matrizes, cadeias, números, dados GeoJSON e booleanos.
O primeiro item tem cadeias, números, booleanos, matrizes e propriedades aninhadas:
{
"id": "863e778d-21c9-4e2a-a984-d31f947c665c",
"categoryName": "Surfboards",
"name": "Teapo Surfboard (6'10\") Grape",
"sku": "teapo-surfboard-72109",
"price": 690.00,
"manufacturer": {
"name": "Taepo",
"location": {
"type": "Point",
"coordinates": [
34.15562788533047, -118.4633004882891
]
}
},
"tags": [
{ "name": "Tail Shape: Swallow" },
{ "name": "Color Group: Purple" }
]
}
O segundo item inclui um conjunto de campos diferente do primeiro item:
{
"id": "6e9f51c1-6b45-440f-af5a-2abc96cd083d",
"categoryName": "Sleeping Bags",
"name": "Vareno Sleeping Bag (6') Turmeric",
"price": 120.00,
"closeout": true,
"manufacturer": {
"name": "Vareno"
},
"tags": [
{ "name": "Color Group: Yellow" },
{ "name": "Bag Shape: Mummy" }
]
}
Consultar os itens JSON
Para compreender alguns dos principais aspetos da API para a linguagem de consulta noSQL, é útil experimentar algumas consultas de exemplo.
Esta primeira consulta devolve simplesmente todo o item JSON para cada item no contentor. O identificador
products
neste exemplo é arbitrário e pode utilizar qualquer nome para referenciar o contentor.SELECT * FROM products
Os resultados da consulta são:
[ { "id": "863e778d-21c9-4e2a-a984-d31f947c665c", "categoryName": "Surfboards", "name": "Teapo Surfboard (6'10\") Grape", "sku": "teapo-surfboard-72109", "price": 690, "manufacturer": { "name": "Taepo", "location": { "type": "Point", "coordinates": [ 34.15562788533047, -118.4633004882891 ] } }, "tags": [ { "name": "Tail Shape: Swallow" }, { "name": "Color Group: Purple" } ] }, { "id": "6e9f51c1-6b45-440f-af5a-2abc96cd083d", "categoryName": "Sleeping Bags", "name": "Vareno Sleeping Bag (6') Turmeric", "price": 120, "closeout": true, "manufacturer": { "name": "Vareno" }, "tags": [ { "name": "Color Group: Yellow" }, { "name": "Bag Shape: Mummy" } ] } ]
Nota
Normalmente, os itens JSON incluem campos adicionais geridos pelo Azure Cosmos DB. Estes campos incluem, mas não estão limitados a:
_rid
_self
_etag
_ts
Para este artigo, estes campos são removidos para tornar a saída mais curta e fácil de compreender.
Esta consulta devolve os itens em que o
categoryName
campo correspondeSleeping Bags
a . Uma vez que se trata de umaSELECT *
consulta, o resultado da consulta é o item JSON completo. Para obter mais informações sobreSELECT
sintaxe, consulteSELECT
a instrução. Esta consulta também utiliza o alias mais curtop
para o contentor.SELECT * FROM products p WHERE p.categoryName = "Sleeping Bags"
Os resultados da consulta são:
[ { "id": "6e9f51c1-6b45-440f-af5a-2abc96cd083d", "categoryName": "Sleeping Bags", "name": "Vareno Sleeping Bag (6') Turmeric", "price": 120, "closeout": true, "manufacturer": { "name": "Vareno" }, "tags": [ { "name": "Color Group: Yellow" }, { "name": "Bag Shape: Mummy" } ] } ]
Esta consulta seguinte utiliza um filtro diferente e, em seguida, reformata a saída JSON para uma forma diferente. A consulta projeta um novo objeto JSON com três campos:
name
emanufacturer.name
sku
. Este exemplo utiliza vários aliases, incluindoproduct
evendor
para reformular o objeto de saída num formato que a nossa aplicação pode utilizar.SELECT { "name": p.name, "sku": p.sku, "vendor": p.manufacturer.name } AS product FROM products p WHERE p.sku = "teapo-surfboard-72109"
Os resultados da consulta são:
[ { "product": { "name": "Teapo Surfboard (6'10\") Grape", "sku": "teapo-surfboard-72109", "vendor": "Taepo" } } ]
Também pode aplanar os resultados JSON personalizados com
SELECT VALUE
.SELECT VALUE { "name": p.name, "sku": p.sku, "vendor": p.manufacturer.name } FROM products p WHERE p.sku = "teapo-surfboard-72109"
Os resultados da consulta são:
[ { "name": "Teapo Surfboard (6'10\") Grape", "sku": "teapo-surfboard-72109", "vendor": "Taepo" } ]
Por fim, esta última consulta devolve todas as etiquetas com a
JOIN
palavra-chave. Para obter mais informações, consulteJOIN
a palavra-chave. Esta consulta só devolve palavras-chave para produtos fabricados peloTaepo
.SELECT t.name FROM products p JOIN t in p.tags WHERE p.manufacturer.name = "Taepo"
Os resultados são:
[ { "name": "Tail Shape: Swallow" }, { "name": "Color Group: Purple" } ]
Concluir
Os exemplos neste artigo mostram vários aspetos da linguagem de consulta do Azure Cosmos DB:
- A API para NoSQL funciona em valores JSON. A API lida com entidades em forma de árvore em vez de linhas e colunas. Pode consultar os nós de árvore em qualquer profundidade arbitrária, como
Node1.Node2.Node3…..Nodem
, semelhante à referência de duas partes de<table>.<column>
no SQL anSI. - Uma vez que a linguagem de consulta funciona com dados sem esquema, o sistema de tipo tem de estar vinculado dinamicamente. A mesma expressão pode produzir diferentes tipos em itens diferentes. O resultado de uma consulta é um valor JSON válido, mas não é garantido que seja de um esquema fixo.
- O Azure Cosmos DB suporta apenas itens JSON rigorosos. O sistema de tipos e as expressões são restringidos para processar apenas os tipos JSON. Para obter mais informações, veja a especificação JSON.
- Um contentor é uma coleção sem esquema de itens JSON. A contenção captura implicitamente relações dentro e entre itens de contentor, não por chave primária e relações de chave externa. Esta funcionalidade é importante para as associações intra item. Para obter mais informações, consulte
JOIN
a palavra-chave.
Passos seguintes
- Explore algumas funcionalidades de consulta: