®
© 2014 MapR Technologies 1
®
© 2014 MapR Technologies
Drill 1.0
Jacques Nadeau, Architect and VP Apache Drill
May 26, 2015
®
© 2014 MapR Technologies 2
Tonight’s Agenda
•  1.0 Update
•  Apache Kylin
•  Drill ODBC & Drill Explorer
®
© 2014 MapR Technologies 3
Nearly three years in the making
•  45 code contributors
•  Countless Documentation, feature, design contributors
•  >200k lines of code
•  2200 Jiras
•  100+ Hangouts
•  We’re at 1.0!
®
© 2014 MapR Technologies 4
Vision: Achieve complete performance
Execute Fast
•  Standard SQL
•  Read data fast
•  Leverage columnar
encodings and execution
•  Execute operations
quickly
•  Scale out, not up
Iterate Fast
•  Work without prep
•  Decentralize data
management
•  In-situ security
•  Explore + query
•  Access multiple sources
•  Avoid the ETL rinse cycle
®
© 2014 MapR Technologies 5
JSON Model, Columnar Speed
JSON
BSON
Mongo
Hbase
NoSQL
Parquet
Avro
CSV
TSV
Schema-lessFixed schema
Flat
Complex
Name! Gender! Age!
Michael! M! 6!
Jennifer! F! 3!
{!
name: {!
first: Michael,!
last: Smith!
},!
hobbies: [ski, soccer],!
district: Los Altos!
}!
{!
name: {!
first: Jennifer,!
last: Gates!
},!
hobbies: [sing],!
preschool: CCLC!
}!
RDBMS/SQL-on-Hadoop table
Apache Drill table
®
© 2014 MapR Technologies 6
Apache Drill Provides the Best of Both Worlds
Acts Like a Database
•  ANSI SQL: SELECT, FROM, WHERE,
JOIN, HAVING, ORDER BY, WITH,
CTAS, ALL, EXISTS, ANY, IN, SOME
•  VarChar, Int, BigInt, Decimal, VarBinary,
Timestamp, Float, Double, etc.
•  Subqueries, scalar subqueries, partition
pruning, CTE
•  Data warehouse offload
•  Tableau, ODBC, JDBC
•  TPC-H & TPC-DS-like workloads
•  Supports Hive SerDes
•  Supports Hive UDFs
•  Supports Hive Metastore
Even When Your Data Doesn’t
•  Path based queries and
wildcards
–  select * from /my/logs/
–  select * from /revenue/*/q2
•  Modern data types
–  Map, Array, Any
•  Complex Functions and
Relational Operators
–  FLATTEN, kvgen, convert_from,
convert_to, repeated_count, etc
•  JSON Sensor analytics
•  Complex data analysis
•  Alternative DSLs
®
© 2014 MapR Technologies 7© 2014 MapR Technologies
®
What Drill Can Do For You
®
© 2014 MapR Technologies 8
SELECT timestamp, message
FROM dfs1.logs.`AppServerLogs/2014/Jan/`
WHERE errorLevel > 2
This is a cluster in Apache Drill
-  DFS
-  HBase
-  Hive meta-store
-  MongoDB
A work-space
-  Typically a
sub-
directory
A table
-  pathnames
-  HBase table
-  Hive table
Everything looks like a table…
®
© 2014 MapR Technologies 9
Query a file or a directory tree
-- Queries on files
SELECT errorLevel, COUNT(*)
FROM dfs.logs.`AppServerLogs/2014/Jan/log.json`
GROUP BY errorLevel;
-- Queries on entire directory tree
use dfs.logs;
SELECT errorLevel, COUNT(*)
FROM AppServerLogs
GROUP BY errorLevel;
®
© 2014 MapR Technologies 10
Directories are implicit partitions
-- Direct
SELECT dir0, SUM(amount)
FROM sales

GROUP BY dir1 IN (q1, q3)
-- View
CREATE VIEW sales_q2 as
SELECT dir0 as year, amount
FROM sales
WHERE dir = ‘q2’
sales
├── 2014
│   ├── q1
│   ├── q2
│   ├── q3
│   └── q4
└── 2015
└── q1
®
© 2014 MapR Technologies 11
Interpret binary data on the fly
CONVERT_FROM and CONVERT_TO allows access to common
Hadoop encodings:
•  Boolean, byte, byte_be, tinyint, tinyint_be, smallint, smallint_be,
int, int_be, bigint, bigint_be, float, double, int_hadoopv,
bigint_hadoopv, date_epoch_be, date_epoch, time_epoch_be,
time_epoch, utf8, utf16, json
•  E.g. CONVERT_FROM(mydata, ‘int_hadoopv’) => Internal INT
format
•  E.g. CONVERT_FROM(mydata, ‘JSON’) => UTF8 JSON to
Internal complex object
®
© 2014 MapR Technologies 12
Access complex data with SQL
Reference subfields using dot notation
SELECT	
  t.address.state	
  FROM	
  t	
  
Reference array items using json index
SELECT	
  t.dogs[0]	
  FROM	
  t	
  
Mix Both
SELECT	
  t.dogs[0].name	
  FROM	
  t	
  
{	
  
	
  	
  name:	
  “Jacques”,	
  
	
  	
  wife:	
  “Sarah”,	
  
	
  	
  address:	
  {	
  
	
  	
  	
  	
  city:	
  “Santa	
  Clara”,	
  
	
  	
  	
  	
  state:	
  “CA”	
  
	
  	
  },	
  
	
  dogs:	
  [	
  
	
  	
  	
  	
  {name:	
  “William”,	
  age:	
  19}	
  
	
  	
  	
  	
  {name:	
  “Kate”,	
  age:	
  10}	
  
	
  	
  	
  	
  {name:	
  “Philip”,	
  age:	
  3}	
  
	
  	
  ]	
  
}	
  
®
© 2014 MapR Technologies 13
Make Complex Data Relational using FLATTEN
SELECT	
  name,	
  FLATTEN(dogs)	
  FROM	
  t	
  
{name:	
  “Jacques”,	
  dog:	
  {name:	
  “William”,	
  age:	
  19}}	
  
{name:	
  “Jacques”,	
  dog:	
  {name:	
  “Kate”,	
  age:	
  10}}	
  
{name:	
  “Jacques”,	
  dog:	
  {name:	
  “Philip”,	
  age:	
  3}}	
  
	
  
=> 3 records, repeating value for non-flattened columns
®
© 2014 MapR Technologies 14
Grab fields you didn’t know existed
•  In many JSON datasets, map keys are data, not metadata
{	
  
	
  	
  sessionid:	
  1234,	
  
	
  	
  pages:	
  {	
  
	
  	
  	
  	
  "/home/":	
  {time:	
  15,	
  scroll:	
  70},	
  
	
  	
  	
  	
  "/store/":	
  {time:	
  30,	
  scroll:	
  50},	
  
	
  	
  	
  	
  "/return/":	
  {time:	
  45,	
  scroll:	
  100},	
  
	
  	
  	
  	
  "/support/":	
  {time:	
  30,	
  scroll:	
  10}	
  
}	
  
	
  
SELECT	
  sessionid,	
  count(*)	
  from	
  (	
  
	
  SELECT	
  sessionid,	
  FLATTEN(KVGEN(pages))	
  FROM	
  t	
  
)	
  WHERE	
  scroll	
  >	
  50	
  and	
  time	
  >30	
  	
  
GROUP	
  BY	
  sessionid	
  
HAVING	
  count(*)	
  >=	
  1	
  
	
  
®
© 2014 MapR Technologies 15
Extract embedded JSON
-- embedded JSON value inside column donutjson inside
column-family cf1 of an hbase table donuts
SELECT
d.name, COUNT(d.fillings)
FROM (
SELECT convert_from(cf1.donutjson, JSON) as d
FROM hbase.donuts);
®
© 2014 MapR Technologies 16
Advanced: Analyze Drill’s JSON profiles
SELECT	
  
	
  	
  t3.majorFragmentId,	
  
	
  	
  t3.opProfile.operatorType	
  opType,	
  
	
  	
  sum(t3.opProfile.peakLocalMemoryAllocated)	
  aggPeakMemoryAcrossAllMinorFragments	
  
FROM	
  
	
  	
  (SELECT	
  
	
  	
  	
  	
  	
  	
  	
  t2.majorFragmentId,	
  
	
  	
  	
  	
  	
  	
  	
  flatten(t2.minorFragProfile.operatorProfile)	
  opProfile	
  
	
  	
  	
  FROM	
  
	
  	
  	
  	
  	
  	
  	
  (SELECT	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  t1.majorFragment.majorFragmentId	
  majorFragmentId,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  flatten(t1.majorFragment.minorFragmentProfile)	
  minorFragProfile	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  FROM	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (SELECT	
  flatten(fragmentProfile)	
  as	
  majorFragment	
  from	
  `profile.json`	
  t0)	
  t1	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  t2	
  
	
  	
  	
  )	
  t3	
  
WHERE	
  t3.opProfile.operatorType	
  =	
  6	
  	
  
®
© 2014 MapR Technologies 17
Secure your data without an extra service
•  Drill Views
•  Ownership chaining with
configurable delegation TTL
•  Leverages existing HDFS
ACLs
•  Complete security solution
without additional services or
software
MaskedSales.view
owner: Cindy
GrossSales.view
owner: dba
RawSales.parquet
owner: dba
Frank file
view perm
Cindy file
view perm
dba
delegated
read
2-stepownershipchain
SQL by
Frank
®
© 2014 MapR Technologies 18
What’s Next
•  Continue on a ~1 month release cycles (1.1 June/July)
•  Integration with JDBC, Cassandra
•  Window Functions & CTAS tool
•  Integration with Kylin
•  EMR Bootstrap actions & tools for EC2 deployment
®
© 2014 MapR Technologies 19
Questions
•  Download at drill.apache.org/download
•  Join the discussion
–  user@drill.apache.org, dev@drill.apache.org
–  @ApacheDrill, @INTJesus

Drill 1.0

  • 1.
    ® © 2014 MapRTechnologies 1 ® © 2014 MapR Technologies Drill 1.0 Jacques Nadeau, Architect and VP Apache Drill May 26, 2015
  • 2.
    ® © 2014 MapRTechnologies 2 Tonight’s Agenda •  1.0 Update •  Apache Kylin •  Drill ODBC & Drill Explorer
  • 3.
    ® © 2014 MapRTechnologies 3 Nearly three years in the making •  45 code contributors •  Countless Documentation, feature, design contributors •  >200k lines of code •  2200 Jiras •  100+ Hangouts •  We’re at 1.0!
  • 4.
    ® © 2014 MapRTechnologies 4 Vision: Achieve complete performance Execute Fast •  Standard SQL •  Read data fast •  Leverage columnar encodings and execution •  Execute operations quickly •  Scale out, not up Iterate Fast •  Work without prep •  Decentralize data management •  In-situ security •  Explore + query •  Access multiple sources •  Avoid the ETL rinse cycle
  • 5.
    ® © 2014 MapRTechnologies 5 JSON Model, Columnar Speed JSON BSON Mongo Hbase NoSQL Parquet Avro CSV TSV Schema-lessFixed schema Flat Complex Name! Gender! Age! Michael! M! 6! Jennifer! F! 3! {! name: {! first: Michael,! last: Smith! },! hobbies: [ski, soccer],! district: Los Altos! }! {! name: {! first: Jennifer,! last: Gates! },! hobbies: [sing],! preschool: CCLC! }! RDBMS/SQL-on-Hadoop table Apache Drill table
  • 6.
    ® © 2014 MapRTechnologies 6 Apache Drill Provides the Best of Both Worlds Acts Like a Database •  ANSI SQL: SELECT, FROM, WHERE, JOIN, HAVING, ORDER BY, WITH, CTAS, ALL, EXISTS, ANY, IN, SOME •  VarChar, Int, BigInt, Decimal, VarBinary, Timestamp, Float, Double, etc. •  Subqueries, scalar subqueries, partition pruning, CTE •  Data warehouse offload •  Tableau, ODBC, JDBC •  TPC-H & TPC-DS-like workloads •  Supports Hive SerDes •  Supports Hive UDFs •  Supports Hive Metastore Even When Your Data Doesn’t •  Path based queries and wildcards –  select * from /my/logs/ –  select * from /revenue/*/q2 •  Modern data types –  Map, Array, Any •  Complex Functions and Relational Operators –  FLATTEN, kvgen, convert_from, convert_to, repeated_count, etc •  JSON Sensor analytics •  Complex data analysis •  Alternative DSLs
  • 7.
    ® © 2014 MapRTechnologies 7© 2014 MapR Technologies ® What Drill Can Do For You
  • 8.
    ® © 2014 MapRTechnologies 8 SELECT timestamp, message FROM dfs1.logs.`AppServerLogs/2014/Jan/` WHERE errorLevel > 2 This is a cluster in Apache Drill -  DFS -  HBase -  Hive meta-store -  MongoDB A work-space -  Typically a sub- directory A table -  pathnames -  HBase table -  Hive table Everything looks like a table…
  • 9.
    ® © 2014 MapRTechnologies 9 Query a file or a directory tree -- Queries on files SELECT errorLevel, COUNT(*) FROM dfs.logs.`AppServerLogs/2014/Jan/log.json` GROUP BY errorLevel; -- Queries on entire directory tree use dfs.logs; SELECT errorLevel, COUNT(*) FROM AppServerLogs GROUP BY errorLevel;
  • 10.
    ® © 2014 MapRTechnologies 10 Directories are implicit partitions -- Direct SELECT dir0, SUM(amount) FROM sales
 GROUP BY dir1 IN (q1, q3) -- View CREATE VIEW sales_q2 as SELECT dir0 as year, amount FROM sales WHERE dir = ‘q2’ sales ├── 2014 │   ├── q1 │   ├── q2 │   ├── q3 │   └── q4 └── 2015 └── q1
  • 11.
    ® © 2014 MapRTechnologies 11 Interpret binary data on the fly CONVERT_FROM and CONVERT_TO allows access to common Hadoop encodings: •  Boolean, byte, byte_be, tinyint, tinyint_be, smallint, smallint_be, int, int_be, bigint, bigint_be, float, double, int_hadoopv, bigint_hadoopv, date_epoch_be, date_epoch, time_epoch_be, time_epoch, utf8, utf16, json •  E.g. CONVERT_FROM(mydata, ‘int_hadoopv’) => Internal INT format •  E.g. CONVERT_FROM(mydata, ‘JSON’) => UTF8 JSON to Internal complex object
  • 12.
    ® © 2014 MapRTechnologies 12 Access complex data with SQL Reference subfields using dot notation SELECT  t.address.state  FROM  t   Reference array items using json index SELECT  t.dogs[0]  FROM  t   Mix Both SELECT  t.dogs[0].name  FROM  t   {      name:  “Jacques”,      wife:  “Sarah”,      address:  {          city:  “Santa  Clara”,          state:  “CA”      },    dogs:  [          {name:  “William”,  age:  19}          {name:  “Kate”,  age:  10}          {name:  “Philip”,  age:  3}      ]   }  
  • 13.
    ® © 2014 MapRTechnologies 13 Make Complex Data Relational using FLATTEN SELECT  name,  FLATTEN(dogs)  FROM  t   {name:  “Jacques”,  dog:  {name:  “William”,  age:  19}}   {name:  “Jacques”,  dog:  {name:  “Kate”,  age:  10}}   {name:  “Jacques”,  dog:  {name:  “Philip”,  age:  3}}     => 3 records, repeating value for non-flattened columns
  • 14.
    ® © 2014 MapRTechnologies 14 Grab fields you didn’t know existed •  In many JSON datasets, map keys are data, not metadata {      sessionid:  1234,      pages:  {          "/home/":  {time:  15,  scroll:  70},          "/store/":  {time:  30,  scroll:  50},          "/return/":  {time:  45,  scroll:  100},          "/support/":  {time:  30,  scroll:  10}   }     SELECT  sessionid,  count(*)  from  (    SELECT  sessionid,  FLATTEN(KVGEN(pages))  FROM  t   )  WHERE  scroll  >  50  and  time  >30     GROUP  BY  sessionid   HAVING  count(*)  >=  1    
  • 15.
    ® © 2014 MapRTechnologies 15 Extract embedded JSON -- embedded JSON value inside column donutjson inside column-family cf1 of an hbase table donuts SELECT d.name, COUNT(d.fillings) FROM ( SELECT convert_from(cf1.donutjson, JSON) as d FROM hbase.donuts);
  • 16.
    ® © 2014 MapRTechnologies 16 Advanced: Analyze Drill’s JSON profiles SELECT      t3.majorFragmentId,      t3.opProfile.operatorType  opType,      sum(t3.opProfile.peakLocalMemoryAllocated)  aggPeakMemoryAcrossAllMinorFragments   FROM      (SELECT                t2.majorFragmentId,                flatten(t2.minorFragProfile.operatorProfile)  opProfile        FROM                (SELECT                            t1.majorFragment.majorFragmentId  majorFragmentId,                            flatten(t1.majorFragment.minorFragmentProfile)  minorFragProfile                    FROM                            (SELECT  flatten(fragmentProfile)  as  majorFragment  from  `profile.json`  t0)  t1                    )  t2        )  t3   WHERE  t3.opProfile.operatorType  =  6    
  • 17.
    ® © 2014 MapRTechnologies 17 Secure your data without an extra service •  Drill Views •  Ownership chaining with configurable delegation TTL •  Leverages existing HDFS ACLs •  Complete security solution without additional services or software MaskedSales.view owner: Cindy GrossSales.view owner: dba RawSales.parquet owner: dba Frank file view perm Cindy file view perm dba delegated read 2-stepownershipchain SQL by Frank
  • 18.
    ® © 2014 MapRTechnologies 18 What’s Next •  Continue on a ~1 month release cycles (1.1 June/July) •  Integration with JDBC, Cassandra •  Window Functions & CTAS tool •  Integration with Kylin •  EMR Bootstrap actions & tools for EC2 deployment
  • 19.
    ® © 2014 MapRTechnologies 19 Questions •  Download at drill.apache.org/download •  Join the discussion –  user@drill.apache.org, dev@drill.apache.org –  @ApacheDrill, @INTJesus