WebJobsを使うときには、TableStorageに対してICollectorでデータを追加したり、IQueryableでデータを検索したりできて便利でしたが、より細かな制御(ここでいうupsertみたいなこと)をするにはTableStrageのAPIを直接たたく必要があります。 TableStorageのAPIを直接たたくには、CloudTableを引数に受け取るようにします。
以下のコードはキューに入れられたJSONをテーブルに突っ込むコードです。すでにデータが存在する場合は既存のデータとマージします。
using Microsoft.Azure.WebJobs; using Microsoft.WindowsAzure.Storage.Table; namespace HelloWorld { public class Functions { // This function will get triggered/executed when a new message is written // on an Azure Queue called queue. public static void ProcessQueueMessage( [QueueTrigger("queue")] Person message, [Table("sample")] CloudTable sample) { var op = TableOperation.InsertOrMerge(message); sample.Execute(op); } } public class Person : TableEntity { public string Name { get; set; } } }
queueにこんなJSONを投げ込むと
{ "PartitionKey": "okazuki", "RowKey": "test", "Name": "sample taro" }
テーブルにデータが作られます
次にこんなJSONを投げ込むと
{ "PartitionKey": "okazuki", "RowKey": "test", "Name": "tanaka" }
データが書き換わります。