かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Azure WebJobsでTable storageにupsertをかける

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"
}

テーブルにデータが作られます

f:id:okazuki:20160206104526p:plain

次にこんなJSONを投げ込むと

{
    "PartitionKey": "okazuki",
    "RowKey": "test",
    "Name": "tanaka"
}

データが書き換わります。

f:id:okazuki:20160206105032p:plain