Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23:...

33
Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin 1 CSE 444 - Summer 2010

Transcript of Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23:...

Page 1: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Introduction to Database SystemsCSE 444

Lecture 22-23: Pig Latin

1CSE 444 - Summer 2010

Page 2: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Outline

• Based entirely on Pig Latin: A not-so-foreign language for data processing, by Olston, Reed, Srivastava Kumar and Tomkins 2008Srivastava, Kumar, and Tomkins, 2008

2CSE 444 - Summer 2010

Page 3: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Why Pig Latin?

• Map-reduce is a low-level programming environment

• In most applications need more complex queries

Pi t hi h l l i itt i Pi L ti• Pig accepts higher level queries written in Pig Latin, translates them into ensembles of MapReduce jobs– Pig is the system– Pig Latin is the language

3CSE 444 - Summer 2010

Page 4: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Pig Engine Overview• Data model = loosely typed nested relations• Data model = loosely typed nested relations• Query model = a sql-like, dataflow language

• Execution model:Option 1: run locally on your machine– Option 1: run locally on your machine

– Option 2: compile into sequence of map/reduce, run on a cluster supporting Hadoop (e.g., AWS)pp g p ( g , )

• Main idea: use Opt1 to debug, Opt2 to execute

4CSE 444 - Summer 2010

Page 5: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Pig Engine Overview

Pi L tiPig Latin program

5

Page 6: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Example

• Input: a table of urls: (url, category, pagerank)

• Compute the average pagerank of all sufficiently high pageranks, for each category

• Return the answers only for categories with sufficiently many such pages

6CSE 444 - Summer 2010

Page 7: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

First in SQL…

SELECT category, AVG(pagerank)g y, (p g )FROM urlsWHERE pagerank > 0.2WHERE pagerank 0.2GROUP By categoryHAVING COUNT(*) > 106HAVING COUNT( ) > 10

7CSE 444 - Summer 2010

Page 8: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

…then in Pig-Latin

good_urls = FILTER urls BY pagerank > 0.2groups = GROUP good_urls BY categorybig_groups = FILTER groups

BY COUNT(good_urls) > 106

output = FOREACH big_groups GENERATEcategory, AVG(good_urls.pagerank)

Pig Latin combines • high-level declarative querying in the spirit of SQL, and

8

high level declarative querying in the spirit of SQL, and• low-level, procedural programming a la map-reduce.

Page 9: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Types in Pig-Latin

• Atomic: string or number, e.g. ‘Alice’ or 55

• Tuple: (‘Alice’, 55, ‘salesperson’)

• Bag: {(‘Alice’, 55, ‘salesperson’),(‘Betty’,44, ‘manager’), …}( y , , g ), }

• Maps: we will try not to use theseaps e y o o use ese

9CSE 444 - Summer 2010

Page 10: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Types in Pig-Latin

Bags can be nested !

• {(‘a’, {1,4,3}), (‘c’,{ }), (‘d’, {2,2,5,3,2})}

Tuple components can be referenced by number• $0 $1 $2$0, $1, $2, …

10CSE 444 - Summer 2010

Page 11: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

11

Page 12: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Loading data

• Input data = FILES !– Heard that before ?

• The LOAD command parses an input file into a bag of records

• Both parser (=“deserializer”) and output type are provided by user

12CSE 444 - Summer 2010

Page 13: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Loading data

queries = LOAD ‘query_log.txt’USING userfuction( )AS (userID, queryString, timeStamp)( q y g p)

13CSE 444 - Summer 2010

Page 14: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Loading data

• USING userfuction( ) -- is optional– Default deserializer expects tab-delimited file

• AS type – is optional– Default is a record with unnamed fields; refer to them

$ $as $0, $1, …• The return value of LOAD is just a handle to a bag

Th t l di i d i ll d ll li d– The actual reading is done in pull mode, or parallelized

14CSE 444 - Summer 2010

Page 15: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

FOREACH

expanded_queries = FOREACH queriesGENERATE userId, expandQuery(queryString)

expandQuery( ) is a UDF* that produces likely expansionsNote: it returns a bag hence expanded queries is a nested bagNote: it returns a bag, hence expanded_queries is a nested bag

*UDF = User Defined Function

15CSE 444 - Summer 2010

Page 16: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

FOREACH

expanded_queries = FOREACH queriesGENERATE userId,

flatten(expandQuery(queryString))

Now we get a flat collection16

Now we get a flat collectionCSE 444 - Summer 2010

Page 17: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

17CSE 444 - Summer 2010

Page 18: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

FLATTEN

Note that it is NOT a first class function !(that’s one thing I* don’t like about Pig-latin)

• First class FLATTEN:– FLATTEN({{2,3},{5},{},{4,5,6}}) = {2,3,5,4,5,6}

{{ }} { }– Type: {{T}} {T}• Pig-latin FLATTEN

FLATTEN({4 5 6}) 4 5 6– FLATTEN({4,5,6}) = 4, 5, 6– Type: {T} T, T, T, …, T ?????

* “I” = original author of these slides. Opinions might or might not be consistent from quarter to quarter. ☺18CSE 444 - Summer 2010

Page 19: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

FILTER

l i FILTER i BY Id ‘b t’

Remove all queries from Web bots:

real_queries = FILTER queries BY userId neq ‘bot’

Better: use a complex UDF to detect Web bots:

real_queries = FILTER queries BY NOT isBot(userId)

19

BY NOT isBot(userId)CSE 444 - Summer 2010

Page 20: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

JOINres lts {(q er String rl position)}results: {(queryString, url, position)}revenue: {(queryString, adSlot, amount)}

join_result = JOIN results BY queryStringrevenue BY queryStringrevenue BY queryString

join_result : {(queryString, url, position, adSlot, amount)}

20CSE 444 - Summer 2010

Page 21: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

21CSE 444 - Summer 2010

Page 22: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

GROUP BYre en e {(q er String adSlot amo nt)}

grouped_revenue = GROUP revenue BY queryString

revenue: {(queryString, adSlot, amount)}

query_revenues =FOREACH grouped_revenueGENERATE queryString,

SUM(revenue.amount) AS totalRevenue

grouped revenue: {(queryString {(adSlot amount)})}22

grouped_revenue: {(queryString, {(adSlot, amount)})}query_revenues: {(queryString, totalRevenue)}

Page 23: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Simple Map-Reduceinp t {(field1 field2 field3 )}

map_result = FOREACH input

input : {(field1, field2, field3, . . . .)}

GENERATE FLATTEN(map(*))key_groups = GROUP map_result BY $0output = FOREACH key_groups

GENERATE reduce($1)

map result : {(a1, a2, a3, . . .)}

23

p_ {( , , , )}key_groups : {(a1, {(a2, a3, . . .)})}

Page 24: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Where we are…

• Previously…– LOAD – read data– FOREACH – with and without flatten– FILTER– JOIN– GROUP BY

Now• Now…– COGROUP: A generic way to group tuples from

two datasets togethertwo datasets together

24CSE 444 - Summer 2010

Page 25: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Co-GroupDataset 1 results: {(queryString url position)}

grouped data =

Dataset 1 results: {(queryString, url, position)}Dataset 2 revenue: {(queryString, adSlot, amount)}

grouped_data = COGROUP results BY queryString,

revenue BY queryString;q y g;

grouped_data: {(queryString, results:{(url, position)}, revenue:{(adSlot, amount)})}revenue:{(adSlot, amount)})}

What is the output type in general ?

{group id bag dataset 1 bag dataset 2}25CSE 444 - Summer 2010

{group_id, bag dataset 1, bag dataset 2}

Page 26: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Co-Group

Is this an inner join or an outer join ?

26CSE 444 - Summer 2010

Page 27: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Co-Group

grouped_data: {(queryString, results:{(url, position)}, revenue:{(adSlot, amount)})}

url_revenues = FOREACH grouped_dataGENERATE

FLATTEN(distributeRevenue(results, revenue));

h di t ib t R i UDF th t t h…where distributeRevenue is a UDF that accepts search results and revenue information for a query string at a time, and outputs a bag of urls and the revenue attributed

27

to them.CSE 444 - Summer 2010

Page 28: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Co-Group v.s. Join

grouped_data: {(queryString, results:{(url, position)}, revenue:{(adSlot, amount)})}

grouped_data = COGROUP results BY queryString,revenue BY queryString;revenue BY queryString;

join_result = FOREACH grouped_dataGENERATE FLATTEN(results)GENERATE FLATTEN(results),

FLATTEN(revenue);

R lt i th JOIN28

Result is the same as JOINCSE 444 - Summer 2010

Page 29: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Asking for Output: STORE

STORE query_revenues INTO `theoutput'USING myStore();USING myStore();

Meaning: write query_revenues to the file ‘theoutput’

This is when the entire query is finally executed!

29CSE 444 - Summer 2010

Page 30: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Query Processing Steps

Pi L tiPig Latin program

30

Page 31: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Implementation

• Over Hadoop• Parse query:q y

– All between LOAD and STORE one logical plan• Logical plan ensemble of MapReduce jobs

– Each (CO)Group becomes a MapReduce job– Other ops merged into Map or Reduce operators

• Extra MapReduce jobs for sampling before SORT operations

31CSE 444 - Summer 2010

Page 32: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Implementation

32CSE 444 - Summer 2010

Page 33: Introduction to Database Systems CSE 444...Introduction to Database Systems CSE 444 Lecture 22-23: Pig Latin CSE 444 - Summer 2010 1. Outline • Based entirely on Pig Latin: A not-so-foreign

Advice for the Project• Always run first locallyAlways run first locally

– Test your program on your local machine, on a smaller dataset

– After you debugged the program, send it to the cluster

• Have you set up your AWS account yet?R th PIG T t i l?– Run the PIG Tutorial?

33CSE 444 - Summer 2010