読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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