開始使用查詢
適用於:NoSQL
在 Azure Cosmos DB for NoSQL 帳戶中,讀取資料的方式有兩種:
- 點讀取
- 您可以在單一 專案識別碼 和資料分割索引鍵上執行索引鍵/值查閱。 項目識別碼和資料分割索引鍵組合是索引鍵,而項目本身是值。 如果是 1 KB 的檔,點讀取通常會花費一個 要求單位 ,延遲低於 10 毫秒。 點讀取傳回單一完整項目,而不是局部項目或特定欄位。
- 以下是如何使用每個 SDK 來執行端點讀取的一些範例:
- 查詢
- 您可以使用結構化查詢語言 (SQL) (SQL) 作為 JSON 查詢語言來撰寫查詢,以查詢資料。 查詢一律至少需要 2.3 個要求單位,而且一般而言,具有比點讀取更高的變數延遲。 查詢可能會傳回許多項目。
- Azure Cosmos DB 上的大部分大量讀取工作負載都會使用點讀取和查詢的組合。 如果您只需要讀取單一項目,則點讀取比查詢更便宜且更快速。 點讀取不需要使用查詢引擎來存取資料,且可以直接讀取資料。 所有工作負載都無法使用點讀取來獨佔讀取資料,因此支援自訂查詢語言和 無架構索引編制 可提供更有彈性的方式來存取您的資料。
- 以下是如何使用每個 SDK 執行 查詢 的一些範例:
本文的其餘部分說明如何在 Azure Cosmos DB 中開始撰寫查詢。查詢可以透過 SDK 或Azure 入口網站來執行。
上傳範例資料
在您的適用于 NoSQL 的 API Azure Cosmos DB 帳戶中,使用Data Explorer建立名為 的 products
容器。 建立容器之後,請使用資料結構瀏覽器展開 products
容器。 最後,選取 [專案]。
功能表列現在應該有 [新增專案 ] 選項。 您可以使用此選項來建立本文中的 JSON 專案。
提示
針對此快速指南,您可以使用 /id
作為分割區索引鍵。 針對真實世界的容器,選取分割區索引鍵策略時,您應該考慮整體工作負載。 如需詳細資訊,請參閱 資料分割和水準調整。
建立 JSON 項目
這兩個 JSON 專案代表 AdventureWorks中的兩個範例產品。 其中包括產品、其製造商和中繼資料標籤的相關資訊。 每個專案都包含巢狀屬性、陣列、字串、數位、GeoJSON 資料和布林值。
第一個項目包含字串、數字、布林值、陣列和巢狀屬性:
{
"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" }
]
}
第二個專案包含一組與第一個專案不同的欄位:
{
"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" }
]
}
查詢 JSON 項目
若要瞭解適用于 NoSQL 之 API 查詢語言的一些重要層面,請嘗試幾個範例查詢會很有用。
第一個查詢只會傳回容器中每個專案的整個 JSON 專案。 此範例中的識別碼
products
是任意的,您可以使用任何名稱來參考您的容器。SELECT * FROM products
查詢結果為:
[ { "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" } ] } ]
注意
JSON 專案通常包含由 Azure Cosmos DB 管理的其他欄位。 這些欄位包括但不限於:
_rid
_self
_etag
_ts
在本文中,系統會移除這些欄位,讓輸出變得更短且更容易瞭解。
此查詢會傳回欄位符合
Sleeping Bags
的專案categoryName
。 因為這是SELECT *
查詢,所以查詢的輸出會是完整的 JSON 項目。 如需語法的詳細資訊SELECT
,請參閱SELECT
語句。 此查詢也會使用容器的較短p
別名。SELECT * FROM products p WHERE p.categoryName = "Sleeping Bags"
查詢結果為:
[ { "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" } ] } ]
下一個查詢會使用不同的篩選準則,然後將 JSON 輸出重新格式化為不同的圖形。 查詢會投影具有三個欄位的新 JSON 物件:
name
、manufacturer.name
和sku
。 此範例使用各種別名,包括product
和vendor
,將輸出物件重新調整為應用程式可以使用的格式。SELECT { "name": p.name, "sku": p.sku, "vendor": p.manufacturer.name } AS product FROM products p WHERE p.sku = "teapo-surfboard-72109"
查詢結果為:
[ { "product": { "name": "Teapo Surfboard (6'10\") Grape", "sku": "teapo-surfboard-72109", "vendor": "Taepo" } } ]
您也可以使用
SELECT VALUE
來壓平合併自訂 JSON 結果。SELECT VALUE { "name": p.name, "sku": p.sku, "vendor": p.manufacturer.name } FROM products p WHERE p.sku = "teapo-surfboard-72109"
查詢結果為:
[ { "name": "Teapo Surfboard (6'10\") Grape", "sku": "teapo-surfboard-72109", "vendor": "Taepo" } ]
最後,這個最後一個查詢會使用
JOIN
關鍵字傳回所有標記。 如需詳細資訊,請參閱JOIN
關鍵字。 此查詢只會傳回 所Taepo
製造產品的關鍵字。SELECT t.name FROM products p JOIN t in p.tags WHERE p.manufacturer.name = "Taepo"
結果如下:
[ { "name": "Tail Shape: Swallow" }, { "name": "Color Group: Purple" } ]
總結
本文中的範例示範 Azure Cosmos DB 查詢語言的數個層面:
- NoSQL 的 API 適用于 JSON 值。 API 會處理樹狀實體,而不是資料列和資料行。 您可以參考任何任意深度的樹狀節點,例如
Node1.Node2.Node3…..Nodem
,類似於 ANSI SQL 中<table>.<column>
的兩部分參考。 - 因為查詢語言適用於無結構描述資料,所以類型系統必須動態地繫結。 相同的運算式可能會對不同的項目產生不同的類型。 查詢的結果會是有效的 JSON 值,但不保證會是固定的結構描述。
- Azure Cosmos DB 只支援嚴謹的 JSON 項目。 類型系統和運算式僅限於處理 JSON 類型。 如需詳細資訊,請參閱 JSON 規格 \(英文\)。
- 容器是無架構的 JSON 專案集合。 內含專案會隱含地擷取容器專案內和跨容器專案的關聯,而不是主鍵和外鍵關聯。 這項功能對於專案內聯結很重要。 如需詳細資訊,請參閱
JOIN
關鍵字。