Dot-Net

有沒有辦法從表中獲取不同的 PartionKey

  • April 1, 2020

目前,我使用 PartitionKey 來區分將數據儲存到 Azure 表服務中的設備。我想建構一個允許我瀏覽該數據的查看器,但是能夠對其進行結構化以便我可以“按設備”或按 PartitionKey 查看數據會很好。查看器應用程序不知道存在哪些設備,因此如果我能以某種方式獲取給定表中不同 PartionKeys 的列表,那就太好了。這是可能的,還是我將被降級為創建一個元數據表,在其中為每個設備插入一個新行,然後使用它進行查詢?

我認為沒有辦法檢索所有分區鍵。不過,這是一個聰明的解決方法:https ://docs.microsoft.com/en-gb/archive/blogs/avkashchauhan/retrieving-partition-key-range-in-windows-azure-table-storage

引用 Avkash 的部落格:

進一步探勘,我發現沒有內置 API 來獲取分區鍵列表,而是我必須為自己創建一個解決方案。所以我最終在每個分區中插入了一個虛擬行,當我想獲得一個分區鍵列表時,我只是查詢那些虛擬項目,他們給了我我正在尋找的列表。

我敢肯定您已經看到了這一點,但對於可能會遇到這個問題的其他人,我認為這是表服務功能的最佳指南:http: //azure.microsoft.com/en-us/documentation/articles /storage-dotnet-how-to-use-tables/包含範例和詳細 API 文件的連結。

創建一個表來儲存您的分區。按您使用的表名對錶進行分區,並為您創建的每個分區添加一個條目。

public class PartitionEntry : TableServiceEntity { }

tableServiceContext.AddObject("TablePartitions", new PartitionEntry
{
   PartitionKey = "<table name>",
   RowKey = "<partition key>",
});
tableServiceContext.BeginSaveChanges(SaveChangesOptions.ContinueOnError, null, null);

然後只需查詢此表即可獲取分區列表。這對我來說非常易於管理。

var tbl = tableServiceContext.CreateQuery<PartitionEntry>("TablePartitions");
return tbl.Where(i => i.PartitionKey == "<table name>")
         .Select(i => new { PartitionKey = i.RowKey, });

我敢打賭這可以優化。

引用自:https://stackoverflow.com/questions/12862520