かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

Azure WebJobsからテーブルにデータを書き込む

Table属性にテーブル名を指定してICollectorインターフェースを引数に渡してやればOKです。 ICollectorインターフェースの型引数はTableEntityあたりを拡張した型であればOKです。(自前でRowKeyとかPartitionKeyとか定義した型でもOK)

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using System.Configuration;
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")] string message, [Table("sample")] ICollector<Person> sample)
        {
            for (int i = 0; i < 100000; i++)
            {
                sample.Add(new Person
                {
                    PartitionKey = message,
                    RowKey = $"{DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")}-{i}" ,
                    Name = $"okazuki {i}"
                });
            }
        }
    }

    public class Person : TableEntity
    {
        public string Name { get; set; }
    }
}

これでキューにメッセージが追加されたら延々と10万件データを作る処理が出来ます。

こんな感じでキューにメッセージを追加すると

f:id:okazuki:20160203215410p:plain

こんな感じにテーブルにデータが追加されます。

f:id:okazuki:20160203220449p:plain