かずきのBlog@hatena

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

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