如何將 Azure 表格儲存體和 Azure Cosmos DB for Table 與 Ruby 搭配使用

適用於: 數據表

警告

此項目位於其生命週期的 社群支持 階段。 最後,所有相關聯的用戶端連結庫都將永久淘汰。 如需使用此專案的淘汰和替代方案的詳細資訊,請參閱 淘汰通知:Azure 記憶體 PHP 用戶端連結庫

提示

本文中的內容適用於 Azure 資料表記憶體和適用於資料表的 Azure Cosmos DB。 數據表 API 是數據表記憶體的進階供應專案,可提供輸送量優化的數據表、全域散發和自動次要索引。

此文章說明如何建立資料表、儲存您的資料,以及對資料執行 CRUD 作業。 選擇 Azure 資料表服務或 Azure Cosmos DB for Table。 本文中說明的範例是以 Ruby 撰寫的,並且使用 適用於 Ruby 的 Azure 儲存體資料表用戶端程式庫。 涵蓋的案例包括建立資料表、刪除資料表、插入實體,以及查詢資料表中的實體。

建立 Azure 服務帳戶

您可以使用 Azure 表格儲存體或 Azure Cosmos DB 來搭配使用表格。 若要深入瞭解這兩個服務中的數據表供應專案之間的差異,請參閱 數據表的 API 概觀。 您必須為要使用的服務建立帳戶。 下列各節說明如何建立 Azure 資料表儲存體和 Azure Cosmos DB 帳戶,不過您可以只使用其中一個。

Azure 資料表儲存體

建立 Azure 儲存體帳戶最簡單的方法,就是使用 Azure 入口網站。 若要深入了解,請參閱 建立儲存體帳戶

您也可以使用 Azure PowerShellAzure CLI 來建立 Azure 儲存體帳戶。

如果您不想在此時建立儲存體帳戶,也可以使用 Azure 儲存體模擬器在本機環境中執行並測試您的程式碼。 如需詳細資訊,請參閱使用 Azure 儲存體模擬器進行開發和測試

Azure Cosmos DB for Table

如需有關建立 Azure Cosmos DB for Table 帳戶的指示,請參閱建立資料庫帳戶

新增對 Azure 儲存體或 Azure Cosmos DB 的存取權

若要使用 Azure 記憶體或 Azure Cosmos DB,請下載並使用 Ruby Azure 套件。 此套件包含一組與數據表 REST 服務通訊的便利連結庫。

使用 RubyGems 來取得套件

  1. 使用命令列介面,例如 PowerShell (Windows)、Terminal (Mac) 或 Bash (Unix)。
  2. 在命令視窗中輸入 gem install azure-storage-table 以安裝 Gem 和相依性。

匯入封裝

使用您偏好的文字編輯器,將以下內容新增至您打算使用儲存體的 Ruby 檔案頂端:

require "azure/storage/table"

新增連接字串

您可以連線到 Azure 儲存體帳戶或 Azure Cosmos DB for Table 帳戶。 根據您使用的帳戶類型取得 連接字串。

新增 Azure 儲存體連線

「Azure 儲存體」模組會讀取環境變數 AZURE_STORAGE_ACCOUNTAZURE_STORAGE_ACCESS_KEY,以取得連線至「Azure 」儲存體帳戶所需的資訊。 如果未設定這些環境變數,您必須先指定帳戶資訊,才能使用 Azure::Storage::Table::TableService 搭配下列程式代碼:

Azure.config.storage_account_name = "<your Azure Storage account>"
Azure.config.storage_access_key = "<your Azure Storage access key>"

若要從 Azure 入口網站中的傳統或 Resource Manager 儲存體帳戶取得這些值:

  1. 登入 Azure 入口網站
  2. 瀏覽至您要使用的儲存體帳戶。
  3. 在 [設定] 頁面中,選取 [存取金鑰]。
  4. 在 [存取金鑰] 頁面中,觀察存取金鑰 1 和存取金鑰 2。 您可以使用其中一個金鑰。
  5. 選取複製圖示,將金鑰複製到剪貼簿。

新增 Azure Cosmos DB 連線

若要連線至 Azure Cosmos DB,請從 Azure 入口網站複製您的主要連接字串,然後使用所複製的連接字串來建立 Client 物件。 您可以在建立 TableService 物件時傳遞 Client 物件:

common_client = Azure::Storage::Common::Client.create(storage_account_name:'myaccount', storage_access_key:'mykey', storage_table_host:'mycosmosdb_endpoint')
table_client = Azure::Storage::Table::TableService.new(client: common_client)

建立資料表

Azure::Storage::Table::TableService 物件可讓您操作資料表和實體。 若要建立資料表,請使用 create_table() 方法。 下列範例會建立數據表,如果有任何錯誤,則列印錯誤。

azure_table_service = Azure::Storage::Table::TableService.new
begin
    azure_table_service.create_table("testtable")
rescue
    puts $!
end

將實體新增至資料表

若要新增實體,請先建立定義實體屬性的雜湊物件。 針對每個實體,您必須指定 PartitionKeyRowKey。 這些實體是您實體的唯一標識碼,而且是比其他屬性更快速查詢的值。 Azure 儲存體會使用 PartitionKey ,自動將資料表的實體分散在許多儲存體節點上。 具有相同 PartitionKey 的實體會儲存在相同節點上。 RowKey 是實體在其所屬資料分割內的唯一識別碼。

entity = { "content" => "test entity",
    :PartitionKey => "test-partition-key", :RowKey => "1" }
azure_table_service.insert_entity("testtable", entity)

更新實體

有多種方法可以用來更新現有的實體:

Description
update_entity() 透過取代現有實體來進行更新。
merge_entity() 藉由將新的屬性值合併到現有實體來更新現有實體。
insert_or_merge_entity() 藉由取代現有實體來更新現有實體。 如果沒有實體存在,則會插入新的實體。
insert_or_replace_entity() 藉由將新的屬性值合併到現有實體來更新現有實體。 如果沒有實體存在,則會插入新的實體。

下列範例示範使用 update_entity() 來更新實體:

entity = { "content" => "test entity with updated content",
    :PartitionKey => "test-partition-key", :RowKey => "1" }
azure_table_service.update_entity("testtable", entity)

使用 update_entity () merge_entity () 時,如果您要更新的實體不存在,則更新作業會失敗。 因此,如果您想要不論實體是否已經存在都儲存該實體,您應改用 insert_or_replace_entity()insert_or_merge_entity()

使用實體群組

有時候批次提交多個操作是有意義的,可以確保伺服器會進行不可部分完成的處理。 若要達到此目的,您必須先建立 Batch 物件,然後在 TableService 上使用 execute_batch() 方法。 下列範例示範在一個批次中,提交具備 RowKey 2 和 3 的兩個實體。 請注意,它僅適用於具備相同 PartitionKey 的實體。

azure_table_service = Azure::TableService.new
batch = Azure::Storage::Table::Batch.new("testtable",
    "test-partition-key") do
    insert "2", { "content" => "new content 2" }
    insert "3", { "content" => "new content 3" }
end
results = azure_table_service.execute_batch(batch)

查詢實體

若要查詢資料表中的實體,請使用 get_entity() 方法,藉由傳遞資料表名稱、PartitionKeyRowKey 來進行。

result = azure_table_service.get_entity("testtable", "test-partition-key",
    "1")

查詢實體集合

若要查詢資料表中的一組實體,請建立查詢雜湊物件,然後使用 query_entities() 方法。 下列範例示範取得具備相同 PartitionKey的所有實體:

query = { :filter => "PartitionKey eq 'test-partition-key'" }
result, token = azure_table_service.query_entities("testtable", query)

注意

如果結果集太大,以致單一查詢無法傳回,則會傳回接續 Token,供您用來擷取後續的頁面。

查詢實體屬性的子集

一項資料表查詢可以只擷取實體的少數屬性。 此「投影」技術可減少頻寬,並可改善查詢效能,特別是針對大型實體。 使用 select 子句並傳遞您要帶到用戶端的屬性名稱。

query = { :filter => "PartitionKey eq 'test-partition-key'",
    :select => ["content"] }
result, token = azure_table_service.query_entities("testtable", query)

刪除實體

若要刪除實體,請使用 delete_entity() 方法。 請傳入包含實體、實體之 PartitionKey 及 RowKey 的資料表名稱。

azure_table_service.delete_entity("testtable", "test-partition-key", "1")

刪除資料表

若要刪除資料表,請使用 delete_table() 方法,然後傳入要刪除的資料表名稱。

azure_table_service.delete_table("testtable")