Azure Storage Table

Azure Storage Table

由於最近公司開始有一些Azure的站台需要紀錄資料,原本考慮直接用檔案處理掉就好了,但後考量到資料的查詢問題,就開始尋找比較方便又快速的解法,Azure Storage Table 剛好就這麼的是何,並且可以透過 Azure Function 進行中介,實在是方便。

 

A.      何謂Azure 資料表儲存體(Storage Table)

說到建立資料表,通常就會想到資料表關聯、索引等等的一堆麻煩瑣事,但是如果沒有需要那麼複雜的資料設計,又必須要資料表來儲存資料,就可以考慮使用 Azure Storage Table, 資料表儲存體是可將結構化的非關聯式資料儲存在Azure上,又可以快速地新增查詢。

B.      資料表儲存體簡介

Azure的儲存體,分為幾個層次由Account開始,Account指的是Azure的儲存體帳戶, Account可以有多個Table,而每個Table又會包含許多的實體(Entity),實體裡面就會包含資料夾屬性(資料表欄位)。

 

資料表儲存體簡介

資料表實體的繼承的是Microsoft.WindowsAzure.Storage.Table.TableEntity類別,所以也會有幾個幾本的屬性,

  • PartitionKey:分區鍵,這個屬性擁有類似分類的功能,例如,我們會因應使用資料表的程式不一樣將PartitionKey設為Web、API、Service等等的。
  • RowKey :行鍵,定義PartitionKey裡的唯一值。
  • Timestamp – 時間戳記,由系統紀錄此Entity何時被修改過。

屬性的型別參考如下表:

Data Type Property Type Details
Binary byte[] An array of bytes up to 64 KB in size.
Bool bool A Boolean value.
DateTime DateTime A 64-bit value expressed as UTC time. The supported range of values is 1/1/1601 to 12/31/9999.
Double double A 64-bit floating point value.
GUID Guid A 128-bit globally unique identifier.
Int Int32 or int A 32-bit integer.
Int64 Int64 or long A 64-bit integer.
String String A UTF-16-encoded value. String values may be up to 64 KB in size.

 

 

C.      範例使用Azure Function進行資料表儲存體操作

現在就使用 Azure Function 接收一個HTTP Request 然後將資料存回資料表儲存體。

1.先建立一個HTTP trigger的Function

先建立一個HTTP trigger的Function

先建立一個HTTP trigger的Function

2.建立完後的會得到的預設的程式碼

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,ICollector<OutputModel> outputTable, TraceWriter log)

{

log.Info(“C# HTTP trigger function processed a request.”);

 

// parse query parameter

string name = req.GetQueryNameValuePairs()

.FirstOrDefault(q => string.Compare(q.Key, “name”, true) == 0)

.Value;

if (name == null)

{

// Get request body

dynamic data = await req.Content.ReadAsAsync<object>();

name = data?.name;

}

return name == null

? req.CreateResponse(HttpStatusCode.BadRequest, “Please pass a name on the query string or in the request body”)

: req.CreateResponse(HttpStatusCode.OK, “Hello ” + name);

}

3.新增輸出選項,選擇Azure 資料表儲存體

新增輸出選項,選擇Azure 資料表儲存體

新增輸出選項,選擇Azure 資料表儲存體

新增輸出選項,選擇Azure 資料表儲存體

其中的資料表參數名稱,為等等在Azure Function時操作使用的參數。

 

 

4.先建立一個Model 來定義你的資料屬性

public class OutputModel

{

public string PartitionKey { get; set; }

public string RowKey { get; set; }

public string Name { get; set; }

}

 

 

5.在Azure Function裡新增一筆資料完整程式碼

using System.Net;

 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,ICollector<OutputModel> outputTable, TraceWriter log)

{

log.Info(“C# HTTP trigger function processed a request.”);

 

// parse query parameter

string name = req.GetQueryNameValuePairs()

.FirstOrDefault(q => string.Compare(q.Key, “name”, true) == 0)

.Value;

 

if (name == null)

{

// Get request body

dynamic data = await req.Content.ReadAsAsync<object>();

name = data?.name;

}

 

outputTable.Add(

new OutputModel() {

PartitionKey = “Test”,

RowKey = DateTime.Today.Day.ToString(),

Name = $”Hello {name}\r\n” + DateTime.Now.ToString()

}

);

return name == null

? req.CreateResponse(HttpStatusCode.BadRequest, “Please pass a name on the query string or in the request body”)

: req.CreateResponse(HttpStatusCode.OK, “Hello ” + name);

}

public class OutputModel

{

public string PartitionKey { get; set; }

public string RowKey { get; set; }

public string Name { get; set; }

}

 

6.測試是否有將資料存入資料表儲存體

測試是否有將資料存入資料表儲存體

測試是否有將資料存入資料表儲存體

測試是否有將資料存入資料表儲存體

Azure Storage Explorer請參考Azure 儲存體總管

(https://azure.microsoft.com/zh-tw/features/storage-explorer)

 

Azure Function 加上 資料表儲存體,真的是很方便,可以快速的將資料倉儲,如果需要可以再進一步的進行分析處理,就可以分階段並快速地完成許多繁瑣的工作,真的是很方便呢。

 

D.      Reference

https://docs.microsoft.com/zh-tw/azure/storage/tables/table-storage-overview

https://docs.microsoft.com/zh-tw/rest/api/storageservices/Understanding-the-Table-Service-Data-Model?redirectedfrom=MSDN

https://azure.microsoft.com/zh-tw/features/storage-explorer

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料