SQL 쿼리 시작Getting started with SQL queries

적용 대상: SQL API

SQL API 계정 Azure Cosmos DB에서는 두 가지 방법으로 데이터를 읽을 수 있습니다.In Azure Cosmos DB SQL API accounts, there are two ways to read data:

Point reads -단일 항목 ID 및 파티션 키에 대 한 키/값 조회를 수행할 수 있습니다.Point reads - You can do a key/value lookup on a single item ID and partition key. 항목 ID 와 파티션 키 조합은 키 이며 항목 자체는 값입니다.The item ID and partition key combination is the key and the item itself is the value. 1kb 문서의 경우 지점은 일반적으로 10 밀리초 미만의 대기 시간으로 비용 1 요청 단위 를 읽습니다.For a 1 KB document, point reads typically cost 1 request unit with a latency under 10 ms. Point reads는 단일 항목을 반환 합니다.Point reads return a single item.

다음은 각 SDK를 사용 하 여 요소 읽기 를 수행 하는 방법에 대 한 몇 가지 예입니다.Here are some examples of how to do Point reads with each SDK:

Sql 쿼리 -JSON 쿼리 언어로 구조적 쿼리 언어 (sql)를 사용 하 여 쿼리를 작성 하 여 데이터를 쿼리할 수 있습니다.SQL queries - You can query data by writing queries using the Structured Query Language (SQL) as a JSON query language. 쿼리는 항상 최소 2.3 요청 단위를 비용으로 청구 하며, 일반적으로 지점 읽기 보다 더 높은 가변 대기 시간을 갖습니다.Queries always cost at least 2.3 request units and, in general, will have a higher and more variable latency than point reads. 쿼리에서 많은 항목을 반환할 수 있습니다.Queries can return many items.

Azure Cosmos DB에 대 한 대부분의 읽기 작업은 지점 읽기와 SQL 쿼리의 조합을 사용 합니다.Most read-heavy workloads on Azure Cosmos DB use a combination of both point reads and SQL queries. 단일 항목을 읽어야 하는 경우 쿼리 보다 더 저렴 하 고 더 빠른 지점 읽기가 있습니다.If you just need to read a single item, point reads are cheaper and faster than queries. Point reads는 쿼리 엔진을 사용 하 여 데이터에 액세스할 필요가 없으며 데이터를 직접 읽을 수 있습니다.Point reads don't need to use the query engine to access data and can read the data directly. 물론, 모든 작업에서 지점 읽기를 사용 하 여 데이터를 독점적으로 읽을 수 있는 것은 아니므로 SQL을 쿼리 언어로 지원 하 고 스키마에 관계 없는 인덱싱을 사용 하 여 데이터에 보다 유연 하 게 액세스할 수 있습니다.Of course, it's not possible for all workloads to exclusively read data using point reads, so support of SQL as a query language and schema-agnostic indexing provide a more flexible way to access your data.

다음은 각 SDK를 사용 하 여 SQL 쿼리 를 수행 하는 방법에 대 한 몇 가지 예입니다.Here are some examples of how to do SQL queries with each SDK:

이 문서의 나머지 부분에서는 Azure Cosmos DB에서 SQL 쿼리 작성을 시작 하는 방법을 보여 줍니다.The remainder of this doc shows how to get started writing SQL queries in Azure Cosmos DB. SQL 쿼리는 SDK 또는 Azure Portal를 통해 실행할 수 있습니다.SQL queries can be run through either the SDK or Azure portal.

샘플 데이터 업로드Upload sample data

SQL API Cosmos DB 계정에서 데이터 탐색기 를 열어 라는 컨테이너를 만듭니다 Families .In your SQL API Cosmos DB account, open the Data Explorer to create a container called Families. 만든 후에는 데이터 구조 브라우저를 사용 하 여 찾아서 엽니다.After the it is created, use the data structures browser, to find and open it. 컨테이너에서 Families Items 컨테이너 이름 바로 아래에 옵션이 표시 됩니다.In your Families container, you will see the Items option right below the name of the container. 이 옵션을 선택 하면 화면 가운데의 메뉴 모음에서 ' 새 항목 '을 만들 수 있는 단추가 표시 됩니다.Open this option and you'll see a button, in the menu bar in center of the screen, to create a 'New Item'. 이 기능을 사용 하 여 아래 JSON 항목을 만듭니다.You will use this feature to create the JSON items below.

JSON 항목 만들기Create JSON items

다음 2 개의 JSON 항목은 Andersen 및 Wakefield 제품군에 대 한 문서입니다.The following 2 JSON items are documents about the Andersen and Wakefield families. 부모, 자식, 애완 동물, 주소 및 등록 정보를 포함 합니다.They include parents, children and their pets, address, and registration information.

첫 번째 항목에는 문자열, 숫자, 부울, 배열 및 중첩 속성이 있습니다.The first item has strings, numbers, Booleans, arrays, and nested properties:

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

두 번째 항목은 givenName 및 대신 및를 사용 합니다 familyName firstName lastName .The second item uses givenName and familyName instead of firstName and 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
}

JSON 항목 쿼리Query the JSON items

JSON 데이터에 대 한 몇 가지 쿼리를 수행 하 여 Azure Cosmos DB의 SQL 쿼리 언어에 대 한 몇 가지 주요 측면을 이해 합니다.Try a few queries against the JSON data to understand some of the key aspects of Azure Cosmos DB's SQL query language.

다음 쿼리는 필드가 일치 하는 항목을 반환 합니다 id AndersenFamily .The following query returns the items where the id field matches AndersenFamily. 쿼리 이기 때문에 SELECT * 쿼리 출력은 전체 JSON 항목입니다.Since it's a SELECT * query, the output of the query is the complete JSON item. SELECT 구문에 대 한 자세한 내용은 select 문을 참조 하십시오.For more information about SELECT syntax, see SELECT statement.

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

쿼리 결과는 다음과 같습니다.The query results are:

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

다음 쿼리는 JSON 출력을 다른 모양으로 다시 포맷 합니다.The following query reformats the JSON output into a different shape. 이 쿼리는 Family 두 개의 선택 된 필드인 NameCity 주소 도시가 상태와 같은 새 JSON 개체를 프로젝션 합니다.The query projects a new JSON Family object with two selected fields, Name and City, when the address city is the same as the state. "서 면"은 이러한 경우와 일치 합니다."NY, NY" matches this case.

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

쿼리 결과는 다음과 같습니다.The query results are:

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

다음 쿼리는 id 도시별로 정렬 된 일치 항목의 모든 자식을 포함 하는 이름을 반환 합니다 WakefieldFamily .The following query returns all the given names of children in the family whose id matches WakefieldFamily, ordered by city.

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

결과는 다음과 같습니다.The results are:

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

설명Remarks

위의 예에서는 Cosmos DB 쿼리 언어의 몇 가지 측면을 보여 줍니다.The preceding examples show several aspects of the Cosmos DB query language:

  • SQL API는 JSON 값에 대해 작동 하므로 행과 열 대신 트리 모양의 엔터티를 처리 합니다.Since SQL API works on JSON values, it deals with tree-shaped entities instead of rows and columns. Node1.Node2.Node3…..NodemANSI SQL의 두 부분으로 된 참조와 마찬가지로와 같이 임의의 깊이에서 트리 노드를 참조할 수 있습니다 <table>.<column> .You can refer to the tree nodes at any arbitrary depth, like Node1.Node2.Node3…..Nodem, similar to the two-part reference of <table>.<column> in ANSI SQL.

  • 쿼리 언어는 스키마가 있는 데이터와 함께 작동 하므로 유형 시스템을 동적으로 바인딩해야 합니다.Because the query language works with schemaless data, the type system must be bound dynamically. 항목에 따라 동일한 식이 다른 형식을 생성할 수 있습니다.The same expression could yield different types on different items. 쿼리 결과는 유효한 JSON 값 이지만 고정 스키마가 아닐 수도 있습니다.The result of a query is a valid JSON value, but isn't guaranteed to be of a fixed schema.

  • Azure Cosmos DB는 엄격한 JSON 항목만 지원합니다.Azure Cosmos DB supports strict JSON items only. 형식 시스템과 식이 JSON 형식만 처리하도록 제한됩니다.The type system and expressions are restricted to deal only with JSON types. 자세한 내용은 JSON 사양을 참조하세요.For more information, see the JSON specification.

  • Cosmos 컨테이너는 JSON 항목의 스키마 없는 컬렉션입니다.A Cosmos container is a schema-free collection of JSON items. 컨테이너 항목 간의 관계는 기본 키 및 외래 키 관계가 아닌 포함을 통해 암시적으로 캡처됩니다.The relations within and across container items are implicitly captured by containment, not by primary key and foreign key relations. 이 기능은이 문서의 뒷부분에서 설명 하는 항목 내 조인에 중요 합니다.This feature is important for the intra-item joins discussed later in this article.

다음 단계Next steps