Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20150905 stream analytics

2,588 views

Published on

JAZUG 5周年総会で話したスライドです。

Published in: Technology
  • Be the first to comment

20150905 stream analytics

  1. 1. Stream Analyticsのさわり Go(5) JAZUG / JAZUG5周年総会 大田 一希
  2. 2. 自己紹介 • 名前/SNS • 大田 一希 • Twitter: @okazuki • Blog • かずきのBlog@hatena http://okazuki.hatenablog.com/ • その他 • Microsoft MVP for Windows Platform Development • Javaもやってるよ
  3. 3. http://blogs.technet.com/b/dataplatforminsider/archive/2014/10/29/microsoft-adds-iot-streaming-analytics-data-production-and-workflow-services-to-azure.aspx
  4. 4. http://blogs.technet.com/b/dataplatforminsider/archive/2014/10/29/microsoft-adds-iot-streaming-analytics-data-production-and-workflow-services-to-azure.aspx
  5. 5. Stream Analyticsとは • 流れるデータを処理する基盤 • IoTのような無慈悲なセンサーデータを さばくのに向いてると思う • EventHubやBlobのデータを処理で きる • SQLライクな言語で書ける
  6. 6. 個人的な使った感想 • 簡単!
  7. 7. どれくらい簡単か • EventHubをSQL Databaseに流し込む ケース
  8. 8. どれくらい簡単か • 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;
  9. 9. C#の場合 • 説明するには時間が足りない
  10. 10. Stream Analyticsの場合
  11. 11. Stream Analyticsの場合 SQL Databaseに紐づける EventHubに紐づける
  12. 12. Stream Analyticsの場合 • 超簡単
  13. 13. 時間を扱う • データのグルーピング(集計)のとき やJOINのときに使う • データを指定した時間でぶった切る • その中で集計する • 例えばWindow化関数 • TumblingWindow • HoppingWindow • SlidingWindow
  14. 14. TumblingWindow • 指定した時間でデータを区切る 5sec 10sec 15sec 20sec
  15. 15. TumblingWindow • SELECT COUNT(*) AS Cnt FROM Input GROUP BY TumblingWindow(second, 5) 5sec 10sec 15sec 20sec 3 3 3 3
  16. 16. まとめ • Stream Analytics • 大量データをさばくための基盤 • SQLライクな言語で処理を記述できる • 使い始め超簡単 • 時間という概念大事

×