Introdução às consultas SQL

APLICA-SE A: SQL API

Nas contas Azure Cosmos DB SQL API, existem duas formas de ler dados:

Leituras de pontos - Pode fazer uma procura de chave/valor numa única chave de iD e partição de um item. A combinação de iD e partição do item é a chave e o item em si é o valor. Para um documento de 1 KB, as leituras de ponto normalmente custam 1 unidade de pedido com uma latência inferior a 10 ms. As leituras de ponto devolvem um único item.

Aqui estão alguns exemplos de como fazer Leituras de pontos com cada SDK:

Consultas SQL - Pode consultar dados escrevendo consultas usando a Linguagem de Consulta Estruturada (SQL) como uma linguagem de consulta JSON. As consultas custam sempre pelo menos 2,3 unidades de pedido e, em geral, terão uma latência mais alta e mais variável do que as leituras pontuais. As consultas podem devolver muitos itens.

A maioria das cargas de trabalho pesadas de leitura em Azure Cosmos DB usam uma combinação de leituras de pontos e consultas SQL. Se só precisa de ler um único item, as leituras pontuais são mais baratas e rápidas do que as consultas. As leituras de pontos não precisam de usar o motor de consulta para aceder aos dados e podem ler os dados diretamente. É claro que não é possível que todas as cargas de trabalho leiam exclusivamente dados usando leituras de pontos, por isso o suporte do SQL como uma linguagem de consulta e indexação schema-agnóstica fornecem uma forma mais flexível de aceder aos seus dados.

Aqui estão alguns exemplos de como fazer consultas SQL com cada SDK:

O resto deste doc mostra como começar a escrever consultas SQL em Azure Cosmos DB. As consultas SQL podem ser executadas através do portal SDK ou Azure.

Carregar dados de amostras

Na sua conta DB DA API Cosmos, abra o Data Explorer para criar um recipiente chamado Families . Após a criação do recipiente, utilize o navegador de estruturas de dados para o encontrar e abrir. No seu Families recipiente, verá a Items opção logo abaixo do nome do recipiente. Abra esta opção e verá um botão, na barra de menus no centro do ecrã, para criar um 'Novo Item'. Utilizará esta funcionalidade para criar os itens JSON abaixo.

Criar itens JSON

Os seguintes 2 itens JSON são documentos sobre as famílias Andersen e Wakefield. Incluem pais, filhos e seus animais de estimação, morada e informações de registo.

O primeiro item tem cordas, números, booleans, matrizes e propriedades aninhadas:

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

O segundo artigo utiliza givenName e familyName em vez firstName lastName de:

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

Consulta dos itens JSON

Experimente algumas consultas contra os dados do JSON para entender alguns dos aspectos-chave da linguagem de consulta SQL da Azure Cosmos DB.

A seguinte consulta devolve os itens em que o id campo corresponde AndersenFamily . Uma vez que é uma SELECT * consulta, a saída da consulta é o item JSON completo. Para obter mais informações sobre a sintaxe SELECT, consulte a declaração SELECT.

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

Os resultados da consulta são:

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

A seguinte consulta reformata a saída JSON em uma forma diferente. A consulta projeta um novo objeto JSON Family com dois campos Name selecionados, City e, quando a cidade de endereço é a mesma que o estado. "NY, NY" corresponde a este caso.

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

Os resultados da consulta são:

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

A seguinte consulta devolve todos os nomes de crianças da família cujos id jogos WakefieldFamily , ordenados pela cidade.

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

Os resultados são:

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

Observações

Os exemplos anteriores mostram vários aspetos da linguagem de consulta Cosmos DB:

  • Uma vez que a SQL API trabalha nos valores JSON, trata de entidades em forma de árvore em vez de linhas e colunas. Pode consultar os nós das árvores a qualquer profundidade arbitrária, Node1.Node2.Node3…..Nodem como, semelhante à referência em duas partes do <table>.<column> ANSI SQL.

  • Como a linguagem de consulta funciona com dados sem esquemas, o sistema de tipo deve ser ligado dinamicamente. A mesma expressão pode produzir diferentes tipos em diferentes itens. O resultado de uma consulta é um valor JSON válido, mas não é garantido ser de um esquema fixo.

  • A 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 mais informações, consulte a especificação JSON.

  • Um recipiente Cosmos é uma coleção livre de esquemas de artigos JSON. As relações dentro e fora dos objetos de contentores são implicitamente capturadas pela contenção, não pelas relações fundamentais e externas. Esta funcionalidade é importante para as juntas intra-item que são descritas em Joins in Azure Cosmos DB.

Passos seguintes