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

かずきのBlog@hatena

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

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