16
Stream Analyticsのさわり Go(5) JAZUG / JAZUG5周年総会 大田 一希

20150905 stream analytics

  • Upload
    -

  • View
    2.315

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 20150905 stream analytics

Stream AnalyticsのさわりGo(5) JAZUG / JAZUG5周年総会

大田 一希

Page 2: 20150905 stream analytics

自己紹介

• 名前/SNS• 大田 一希

• Twitter: @okazuki

• Blog• かずきのBlog@hatena

http://okazuki.hatenablog.com/

• その他• Microsoft MVP for Windows Platform Development

• Javaもやってるよ

Page 3: 20150905 stream analytics

http://blogs.technet.com/b/dataplatforminsider/archive/2014/10/29/microsoft-adds-iot-streaming-analytics-data-production-and-workflow-services-to-azure.aspx

Page 4: 20150905 stream analytics

http://blogs.technet.com/b/dataplatforminsider/archive/2014/10/29/microsoft-adds-iot-streaming-analytics-data-production-and-workflow-services-to-azure.aspx

Page 5: 20150905 stream analytics

Stream Analyticsとは

• 流れるデータを処理する基盤• IoTのような無慈悲なセンサーデータをさばくのに向いてると思う

• EventHubやBlobのデータを処理できる

• SQLライクな言語で書ける

Page 6: 20150905 stream analytics

個人的な使った感想

• 簡単!

Page 7: 20150905 stream analytics

どれくらい簡単か

• EventHubをSQL Databaseに流し込むケース

Page 8: 20150905 stream analytics

どれくらい簡単か

• 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;

Page 9: 20150905 stream analytics

C#の場合

• 説明するには時間が足りない

Page 10: 20150905 stream analytics

Stream Analyticsの場合

Page 11: 20150905 stream analytics

Stream Analyticsの場合

SQL Databaseに紐づける

EventHubに紐づける

Page 12: 20150905 stream analytics

Stream Analyticsの場合

• 超簡単

Page 13: 20150905 stream analytics

時間を扱う

• データのグルーピング(集計)のときやJOINのときに使う

• データを指定した時間でぶった切る

• その中で集計する

• 例えばWindow化関数• TumblingWindow

• HoppingWindow

• SlidingWindow

Page 14: 20150905 stream analytics

TumblingWindow

• 指定した時間でデータを区切る

5sec 10sec 15sec 20sec

Page 15: 20150905 stream analytics

TumblingWindow

• SELECT COUNT(*) AS Cnt FROM InputGROUP BY TumblingWindow(second, 5)

5sec 10sec 15sec 20sec

3 3 3 3

Page 16: 20150905 stream analytics

まとめ

• Stream Analytics• 大量データをさばくための基盤

• SQLライクな言語で処理を記述できる

• 使い始め超簡単

• 時間という概念大事