CouchDB Day NYC 2017: MapReduce Views

38
Lab: Map/Reduce Views (30 minutes) Bradley Holt, Developer Advocate Thursday, February 9, 2017 CouchDB Developer Day @BradleyHolt

Transcript of CouchDB Day NYC 2017: MapReduce Views

Page 1: CouchDB Day NYC 2017: MapReduce Views

Lab: Map/Reduce Views (30 minutes)

Bradley Holt, Developer AdvocateThursday, February 9, 2017

CouchDB Developer Day

@BradleyHolt

Page 2: CouchDB Day NYC 2017: MapReduce Views

Prerequisite: Replication Lab

@BradleyHolt

Page 3: CouchDB Day NYC 2017: MapReduce Views
Page 4: CouchDB Day NYC 2017: MapReduce Views

Key Concepts

Design documents Views Map functions Reduce functions

@BradleyHolt

Page 6: CouchDB Day NYC 2017: MapReduce Views

http-console

$ npm install http-console -g$ http-console 127.0.0.1:5984

@BradleyHolthttps://github.com/cloudhead/http-console

Page 7: CouchDB Day NYC 2017: MapReduce Views

http-console

$ npm install http-console -g$ http-console 127.0.0.1:5984> http-console 0.6.3> Welcome, enter .help if you're lost.> Connecting to 127.0.0.1 on port 5984.

@BradleyHolthttps://github.com/cloudhead/http-console

Page 8: CouchDB Day NYC 2017: MapReduce Views

Connecting to CouchDB 2.0

$ http-console root:[email protected]:5984 --json

@BradleyHolt

Page 9: CouchDB Day NYC 2017: MapReduce Views

Connecting to CouchDB 2.0

$ http-console root:[email protected]:5984 --json> http-console 0.6.3> Welcome, enter .help if you're lost.> Connecting to 127.0.0.1 on port 5984.

@BradleyHolt

Page 10: CouchDB Day NYC 2017: MapReduce Views

Connecting to IBM Cloudant

$ http-console https://bradley-holt:[email protected] --json

@BradleyHolt

Page 11: CouchDB Day NYC 2017: MapReduce Views

Connecting to IBM Cloudant

$ http-console https://bradley-holt:[email protected] --json> http-console 0.6.3> Welcome, enter .help if you're lost.> Connecting to bradley-holt.cloudant.com on port 443.

@BradleyHolt

Page 12: CouchDB Day NYC 2017: MapReduce Views

Create a Design Document

/>

@BradleyHolt

Page 13: CouchDB Day NYC 2017: MapReduce Views

Create a Design Document

/> /kittens

@BradleyHolt

Page 14: CouchDB Day NYC 2017: MapReduce Views

Create a Design Document

/kittens>

@BradleyHolt

Page 15: CouchDB Day NYC 2017: MapReduce Views

Create a Design Document

/kittens> PUT /_design/kittens

@BradleyHolt

Page 16: CouchDB Day NYC 2017: MapReduce Views

Create a Design Document

/kittens> PUT /_design/kittens... { "views": { "by_age": { "map": "function(doc) { emit(doc.age_weeks) }" } } }

@BradleyHolt

Page 17: CouchDB Day NYC 2017: MapReduce Views

Create a Design Document

/kittens> PUT /_design/kittens... { "views": { "by_age": { "map": "function(doc) { emit(doc.age_weeks) }" } } }HTTP/1.1 201 CreatedContent-Type: application/json

{ ok: true, id: '_design/kittens', rev: '1-c38a0039638b950f64e02c51fe2e9229'}

@BradleyHolt

Page 18: CouchDB Day NYC 2017: MapReduce Views

Get the Design Document

/kittens>

@BradleyHolt

Page 19: CouchDB Day NYC 2017: MapReduce Views

Get the Design Document

/kittens> GET /_design/kittens

@BradleyHolt

Page 20: CouchDB Day NYC 2017: MapReduce Views

Get the Design Document

/kittens> GET /_design/kittensHTTP/1.1 200 OKContent-Type: application/json

{ _id: '_design/kittens', _rev: '1-c38a0039638b950f64e02c51fe2e9229', views: { by_age: { map: 'function(doc) { emit(doc.age_weeks) }' } }}

@BradleyHolt

Page 21: CouchDB Day NYC 2017: MapReduce Views

Query a View

/kittens>

@BradleyHolt

Page 22: CouchDB Day NYC 2017: MapReduce Views

Query a View

/kittens> GET /_design/kittens/_view/by_age

@BradleyHolt

Page 23: CouchDB Day NYC 2017: MapReduce Views

Query a View

/kittens> GET /_design/kittens/_view/by_ageHTTP/1.1 200 OKContent-Type: application/json

{ total_rows: 5, offset: 0, rows: [ { id: 'smokey', key: 3, value: null }, { id: 'tiger', key: 7, value: null }, { id: 'daisy', key: 9, value: null }, { id: 'mittens', key: 10, value: null }, { id: 'lily', key: 16, value: null } ]}

@BradleyHolt

Page 24: CouchDB Day NYC 2017: MapReduce Views

Query a View with Start Key and End Key

/kittens>

@BradleyHolt

Page 25: CouchDB Day NYC 2017: MapReduce Views

Query a View with Start Key and End Key

/kittens> GET /_design/kittens/_view/by_age?startkey=7&endkey=10

@BradleyHolt

Page 26: CouchDB Day NYC 2017: MapReduce Views

Query a View with Start Key and End Key

/kittens> GET /_design/kittens/_view/by_age?startkey=7&endkey=10HTTP/1.1 200 OKContent-Type: application/json

{ total_rows: 5, offset: 1, rows: [ { id: 'tiger', key: 7, value: null }, { id: 'daisy', key: 9, value: null }, { id: 'mittens', key: 10, value: null } ]}

@BradleyHolt

Page 27: CouchDB Day NYC 2017: MapReduce Views

Add a Reduce Function

/kittens>

@BradleyHolt

Page 28: CouchDB Day NYC 2017: MapReduce Views

Add a Reduce Function

/kittens> GET /_design/kittens

@BradleyHolt

Page 29: CouchDB Day NYC 2017: MapReduce Views

Add a Reduce Function

/kittens> GET /_design/kittensHTTP/1.1 200 OKContent-Type: application/json

{ _id: '_design/kittens', _rev: '1-c38a0039638b950f64e02c51fe2e9229', views: { by_age: { map: 'function(doc) { emit(doc.age_weeks) }' } }}

@BradleyHolt

Page 30: CouchDB Day NYC 2017: MapReduce Views

Add a Reduce Function

/kittens>

@BradleyHolt

Page 31: CouchDB Day NYC 2017: MapReduce Views

Add a Reduce Function

/kittens> PUT /_design/kittens?rev=1-c38a0039638b950f64e02c51fe2e9229

@BradleyHolt

Page 32: CouchDB Day NYC 2017: MapReduce Views

Add a Reduce Function

/kittens> PUT /_design/kittens?rev=1-c38a0039638b950f64e02c51fe2e9229... { "views": { "by_age": { "map": "function(doc) { emit(doc.age_weeks, doc.weight_kilograms) }", "reduce": "_stats" } } }

@BradleyHolt

Page 33: CouchDB Day NYC 2017: MapReduce Views

Add a Reduce Function

/kittens> PUT /_design/kittens?rev=1-c38a0039638b950f64e02c51fe2e9229... { "views": { "by_age": { "map": "function(doc) { emit(doc.age_weeks, doc.weight_kilograms) }", "reduce": "_stats" } } }HTTP/1.1 201 CreatedContent-Type: application/json

{ ok: true, id: '_design/kittens', rev: '2-a64e3539068221e7b4eaa94917faed5f'}

@BradleyHolt

Page 34: CouchDB Day NYC 2017: MapReduce Views

Query a View with a Reduce Function

/kittens>

@BradleyHolt

Page 35: CouchDB Day NYC 2017: MapReduce Views

Query a View with a Reduce Function

/kittens> GET /_design/kittens/_view/by_age

@BradleyHolt

Page 36: CouchDB Day NYC 2017: MapReduce Views

Query a View with a Reduce Function

/kittens> GET /_design/kittens/_view/by_ageHTTP/1.1 200 OKContent-Type: application/json

{ rows: [ { key: null, value: { sum: 4.8919999999999995, count: 5, min: 0.403, max: 1.95, sumsqr: 6.15185 } } ]}

@BradleyHolt

Page 37: CouchDB Day NYC 2017: MapReduce Views

Try It On Your Own

1. Create an view of kittens by weight_kilograms, using age_weeks as the value and using a _stats reduce function

2. Find kittens weighing less than 1 kilogram (use the reduce=false parameter)

3. Find the stats of kittens weighing less than 1 kilogram

@BradleyHolt

Page 38: CouchDB Day NYC 2017: MapReduce Views

Lab: Map/Reduce ViewsCouchDB Developer Day

@BradleyHolt