SDK에서 쿼리 실행
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);
});
}