20150905 stream analytics
TRANSCRIPT
Stream AnalyticsのさわりGo(5) JAZUG / JAZUG5周年総会
大田 一希
自己紹介
• 名前/SNS• 大田 一希
• Twitter: @okazuki
• Blog• かずきのBlog@hatena
http://okazuki.hatenablog.com/
• その他• Microsoft MVP for Windows Platform Development
• Javaもやってるよ
http://blogs.technet.com/b/dataplatforminsider/archive/2014/10/29/microsoft-adds-iot-streaming-analytics-data-production-and-workflow-services-to-azure.aspx
http://blogs.technet.com/b/dataplatforminsider/archive/2014/10/29/microsoft-adds-iot-streaming-analytics-data-production-and-workflow-services-to-azure.aspx
Stream Analyticsとは
• 流れるデータを処理する基盤• IoTのような無慈悲なセンサーデータをさばくのに向いてると思う
• EventHubやBlobのデータを処理できる
• SQLライクな言語で書ける
個人的な使った感想
• 簡単!
どれくらい簡単か
• EventHubをSQL Databaseに流し込むケース
どれくらい簡単か
• C#の場合
namespace Microsoft.ServiceBus.Samples{
using System.Diagnostics;using System.Runtime.Serialization.Json;using System.Threading;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using Microsoft.ServiceBus.Messaging;using Newtonsoft.Json;
public class SimpleEventProcessor : IEventProcessor{
IDictionary<string, int> map;PartitionContext partitionContext;Stopwatch checkpointStopWatch;
public SimpleEventProcessor(){
this.map = new Dictionary<string, int>();}
public Task OpenAsync(PartitionContext context){
Console.WriteLine(string.Format("SimpleEventProcessor initialize. Partition: '{0}', Offset: '{1}'", context.Lease.PartitionId, context.Lease.Offset));
this.partitionContext = context;this.checkpointStopWatch = new Stopwatch();this.checkpointStopWatch.Start();return Task.FromResult<object>(null);
}
public async Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> events){
try{
foreach (EventData eventData in events){
int data;var newData = this.DeserializeEventData(eventData);string key = eventData.PartitionKey;
// Name of device generating the event acts as hash key to retrieve average computed for it so far
if (!this.map.TryGetValue(key, out data)){
// If this is the first time we got data for this device then generate new state this.map.Add(key, -1);
}
// Update data data = newData.Temperature;this.map[key] = data;
C#の場合
• 説明するには時間が足りない
Stream Analyticsの場合
Stream Analyticsの場合
SQL Databaseに紐づける
EventHubに紐づける
Stream Analyticsの場合
• 超簡単
時間を扱う
• データのグルーピング(集計)のときやJOINのときに使う
• データを指定した時間でぶった切る
• その中で集計する
• 例えばWindow化関数• TumblingWindow
• HoppingWindow
• SlidingWindow
TumblingWindow
• 指定した時間でデータを区切る
5sec 10sec 15sec 20sec
TumblingWindow
• SELECT COUNT(*) AS Cnt FROM InputGROUP BY TumblingWindow(second, 5)
5sec 10sec 15sec 20sec
3 3 3 3
まとめ
• Stream Analytics• 大量データをさばくための基盤
• SQLライクな言語で処理を記述できる
• 使い始め超簡単
• 時間という概念大事