SDK에서 쿼리 실행

Completed

SDK의 Microsoft.Azure.Cosmos.Container 클래스에는 쿼리를 만들고, Azure Cosmos DB for NoSQL에 대해 쿼리를 실행하고, C#으로 비동기 스트림을 설정하고, 항목을 클라이언트에 효율적으로 반환하는 일련의 기본 제공 클래스가 포함되어 있습니다.

모든 제품을 반환하는 간단한 SQL 명령을 사용하여 시작해 보겠습니다.

SELECT * FROM products p

C#의 해당 명령 정의는 QueryDefinition 클래스를 사용합니다.

QueryDefinition query = new ("SELECT * FROM products p");

먼저 쿼리하는 항목의 형식을 나타내는 C# 형식을 정의합니다. 이 예제에서는 간단한 C# Product 클래스로 충분합니다.

public class Product
{
    public string id { get; set; }

    public string name { get; set; }

    public string price { get; set; }
}

다음으로, await foreach 루프에서 CProduct 형식과 함께 GetItemQueryIterator 제네릭 메서드를 사용합니다. 비동기 스트림 구조는 반복 및 페이지 매김을 자동으로 처리하여 서버로 이동하여 결과의 각 후속 페이지를 가져옵니다. foreach 루프 내에 각 항목을 처리하는 코드를 추가합니다. 이 예제에서는 각 항목의 ID, 이름, 가격이 콘솔에 출력됩니다.

using (FeedIterator<Product> feedIterator = this.Container.GetItemQueryIterator<Product>(
    query,
    null,
    new QueryRequestOptions() { }))
{
    while (feedIterator.HasMoreResults)
    {
        foreach(var item in await feedIterator.ReadNextAsync())
        {
            Console.WriteLine($"[{item.productid}]\t{item.name,35}\t{item.price,15:C}");
        }
    }
}

azure-cosmos Python SDK는 SQL과 유사한 구문을 사용하여 데이터를 쿼리하고, 페이지 매김을 처리하고, 결과를 클라이언트로 다시 스트리밍하는 효율적인 방법을 제공합니다.

모든 제품을 반환하는 간단한 SQL 명령을 사용하여 시작해 보겠습니다.

SELECT * FROM products p

Python에서 이 쿼리는 query_items 메서드에 문자열로 직접 전달될 수 있습니다.

항목의 구조를 나타내는 Python 사전을 정의합니다. 예를 들어 다음과 같은 제품 구조를 고려합니다.

product = {
    "id": "string",
    "name": "string",
    "price": "string"
}

다음으로, query_items 메서드를 사용합니다. 이 메서드는 파티션 키 및 기타 구성에 대한 SQL 쿼리 문자열 및 옵션을 허용합니다. 결과는 루프를 사용하여 효율적으로 스트리밍됩니다. 루프 내에서 각 항목을 처리하는 코드를 추가합니다. 이 예제에서 각 항목의 ID, 이름및 가격 콘솔에 출력됩니다.

query = "SELECT * FROM products p"
for item in container.query_items(
    query=query,
    enable_cross_partition_query=True):
    print(f"{item['id']}\t{item['name']}\t{item['price']}")

JavaScript SDK를 사용하면 쿼리를 만들고, NoSQL용 Azure Cosmos DB에 쿼리를 실행하고, JavaScript에서 비동기 스트림을 설정하고, 항목을 클라이언트로 효율적으로 반환할 수 있습니다.

모든 제품을 반환하는 간단한 SQL 명령을 사용하여 시작해 보겠습니다.

SELECT * FROM products p

JavaScript SDK를 사용하여 이 쿼리를 실행하려면 QuerySpec 개체를 만들거나 쿼리 문자열을 사용합니다. 코드에서 쿼리 문자열을 정의하는 방법은 다음과 같습니다.

const query = "SELECT * FROM products p";

쿼리 결과의 구조적 처리를 위해 Product 데이터를 나타내는 JavaScript 클래스를 정의할 수 있습니다.

class Product {
    constructor(id, name, price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }
}

다음으로, 쿼리 메서드를 사용하여 QueryIterator 클래스의 인스턴스를 만듭니다. 이 메서드는 파티션 키 및 기타 구성에 대한 SQL 쿼리 문자열 및 옵션을 허용합니다. 비동기 스트림 구조는 반복 및 페이지 매김을 자동으로 처리하여 서버로 이동하여 결과의 각 후속 페이지를 가져옵니다. 루프 내에서 각 항목을 처리하는 코드를 추가합니다. 이 예제에서 각 항목의 ID, 이름및 가격 콘솔에 출력됩니다.

const iterator = container.items.query(
    query,
    { enableCrossPartitionQuery: true }
);

while (iterator.hasMoreResults()) {
    const { resources } = await iterator.fetchNext();
    for (const item of resources) {
        console.log(`[${item.id}]	${item.name.padEnd(35)}	${item.price.toFixed(2)}`);
    }
}

Product 클래스를 사용하여 항목을 나타내려는 경우 다음 코드를 사용할 수 있습니다.

const iterator = container.items.query(
    query,
    { enableCrossPartitionQuery: true }
);

while (iterator.hasMoreResults()) {
    const { resources } = await iterator.fetchNext();
    // Bind the results to the Product class.
    const products = resources.map((product) => {
        return new Product(product.id, product.name, 0);
    });
}