SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Apache Calcite for Enabling SQL
Access to NoSQL Data Systems
such as Apache Geode
Christian Tzolov
2
Christian Tzolov
Engineer at Pivotal,
Big-Data, Hadoop,
Spring Cloud Dataflow,
Apache Geode, Apache HAWQ,
Apache Committer,
Apache Crunch PMC member
ctzolov@pivotal.io
blog.tzolov.net
Twitter: @christzolov
https://nl.linkedin.com/in/tzolov
Whoami
Disclaimer
This talk expresses my personal opinions. It is not read or approved by Pivotal
and does not necessarily reflect the views and opinions of Pivotal nor does it
constitute any official communication of Pivotal.
Pivotal does not support any of the code shared here.
3
Big Data Landscape 2016
•  Volume
•  Velocity
•  Varity
•  Scalability
•  Latency
•  CAP - Consistency vs. Availability
4
•  SQL
•  Custom APIs
–  Key / Value
–  Fluid API
–  REST API
•  {My} Query Language
Unified Access?
At What Cost?
Data Access
5
•  Apache Apex
•  Apache Drill
•  Apache Flink
•  Apache Hive
•  Apache Kylin
•  Apache Phoenix
•  Apache Samza
•  Apache Storm
•  Cascading
•  Qubole Quark
•  SQL-Gremlin
…
SQL?
•  Apache Geode
Calcite Geode Adapter - Overview
Geode API and OQL
SQL/JDBC/ODBC
Convert SQL relational
expressions into OQL queriesGeode Adapter
(Geode Client)
Geode ServerGeode ServerGeode Server
Data Data Data
Push down the relational
expressions supported by Geode
OQL and falls back to the Calcite
Enumerable Adapter for the rest
Enumerable
Adapter
Apache Calcite
Spring Data
Geode
Spring Data API for
interacting with Geode
Parse SQL, converts into
relational expression and
optimizes
Relational Expressions and Optimization
7
Scan Scan
Join
Filter
Project
Customer (c) BookOrder (b)
on customerNumber
b.totalPrice > 0
c.firstName, b.totalPrice
SELECT b."totalPrice", c."firstName” FROM "BookOrder" as b
INNER JOIN "Customer" as c ON b."customerNumber" = c."customerNumber”
WHERE b."totalPrice" > 0;
Scan Scan
Join
Project
Customer (c) BookOrder (b)
on customerNumber
totalPrice > 0
c.firstName, b.totalPrice
Project
firstName,
customerNumber
Filter
totalPrice,
customerNumberProject
Optimiz
Push Down Candidates
8
Relational Operator Geode Support
LIMIT Supported without FETCH
PROJECTION Supported
FILTER Supported
JOIN Only for collocated data
AGGREGATE Only for MAX, MIN, SUM, AVG
SORT Requires DISTINCT statement
Implemented
Apache Geode?
“… in-memory, distributed database
with strong consistency built to
support low latency transactional
applications at extreme scale”
Why Apache Geode?
10
5,700 train stations
4.5 million tickets per day
20 million daily users
1.4 billion page views per day
40,000 visits per second
7,000 stations
72,000 miles of track
23 million passengers daily
120,000 concurrent users
10,000 transactions per minute
https://pivotal.io/big-data/case-study/distributed-in-memory-data-management-solution
https://pivotal.io/big-data/case-study/scaling-online-sales-for-the-largest-railway-in-the-world-china-railway-corporation
China Railway
11
•  In-Memory Data Storage
–  > 100TB memory
–  JVM Heap + Off Heap
•  Any Data Format
–  Key-Value/Object Store
•  ACID Compliant Transactions
•  HA and Linear Scalability
•  Strong Consistency
•  Streaming and Event Processing
–  Listeners
–  Distributed Functions
–  Continuous OQL Queries
•  Multi-site / Inter-cluster
•  Embedded and Standalone
•  Top Level Apache Project
Apache Geode Features
Apache Geode Concepts
Cache Server (member)
Cache
Region 1
Region N
ValKe
y
v1k1
v2k2
…
Cache - In-memory collection
of Regions
Region - consistent, distributed
Map (key-value),
Partitioned or Replicated
CacheServer – process
connected to the distributed
system with created Cache
Client (member)Locator (member)
Client –read and modify the
content of the distributed
system
Locator – tracks
system members and
provides membership
information
…
Listeners
Functions
Functions – distributed,
concurrent data
processing
Listener – event handler.
Registers for one or
more events and notified
when they occur
Geode Topologies
Cache ServerCache ServerCache Server
Cache Data Cache Data Cache Data Peer-to-Peer
Cache ServerCache ServerCache Server
Cache Data Cache Data Cache Data
Client
Local Cache
pool
Client-Server
Cache Server
Cache Server
Gateway Sender
…
Cache Server
Gateway Receiver
Cache ServerCache Server
Cache Data Cache Data Cache Data Cache Data
Gateway Receiver
Cache Server
… Gateway Sender
Cache ServerCache Server
Cache Data Cache Data Cache Data Cache Data
WAN Multi-site Boundary Multi-Site
Geode Client API
•  Client Cache
•  Key / Value - Region GET, PUT, REMOVE
•  OQL – QueryService
Geode Data Types & Serialization
•  Key-Value with complex value formats
•  Portable Data eXchange (PDX) Serialization – Delta propagation, schema
evolution, polyglot support …
•  Object Query Language (OQL)
SELECT p.name
FROM /Person p
WHERE p.pet.type = “dino”
{
id: 1,
name: “Fred”,
age: 42,
pet: {
name: “Barney”,
type: “dino”
}
}
single field deserialization
nested fields
Geode Demo (GFSH and OQL)
•  Connect to Geode cluster,
•  List available Regions
•  Run OQL query
Apache Calcite?
Java framework that allows SQL interface and advanced query
optimization, for virtually any data system
•  Query Parser, Validator and Optimizer(s)
•  Local/Remote JDBC drivers
•  Streaming
•  Agnostic to how data is stored and process
•  Balance SQL completes vs. integrity of Data system native capabilities
Apache Calcite Data Types
•  Catalog – namespaces accessed in queries
•  Schema - collection of schemas and tables
•  Table - single data set, collection of rows
•  RelDataType – SQL fields types in a Table
Your Data System
Data System Data Types
Calcite
Schema
SQL Engine
Table Table
JDBC
Table…
Data Type
Mapping SELECT title, author FROM test.BookMaster
Data Type Fields Schema Table
Calcite Data Types: RelDataType
19
Type of a scalar expression or row
•  RelDataTypeFactory – RelDataType factory
•  JavaTypeFactory - registers Java classes as record types
•  JavaTypeFactoryImpl - Java Reflection to build RelDataTypes
•  SqlTypeFactoryImpl - Default implementation with all SQL types
Geode to Calcite Data Types Mapping
20
Geode Cache
Region 1
Region K
ValKey
v1k1
v2k2
…
Calcite Schema
Table 1
Table K
Col1 Col2 ColN
V(M,1)RowM V(M,2) V(M,N)
V(2,1)Row2 V(2,2) V(2,N)
V(1,1)Row1 V(1,2) V(1,N)
…
Regions are mapped into Tables
Geode Cache is mapped into Calcite Schema
Geode Key/Value is mapped
into Table Row
Create Column Types
(RelDataType) from Geode
Value class
(JavaTypeFactoryImpl)
Calcite Bootstrap Flow
21
Typical calcite initialization flow
Model
(JSON)
SchemaFactory
Schema
Tables
Creates
Creates
Configures Calcite
Creates
Calcite Model
{
version: '1.0',
defaultSchema: 'TEST',
schemas: [ {
name: 'TEST',
type: 'custom',
factory: 'org.apache.calcite.adapter.geode.simple.GeodeSchemaFactory',
operand: {
locatorHost: 'localhost',
locatorPort: '10334',
regions: 'BookMaster',
pdxSerializablePackagePath: 'net.tzolov.geode.bookstore.domain.*'
}
}]
}
Reference to your adapter
schema factory implementation
class
Parameters to be passed to
your adapter schema factory
implementation
The path to <my-model>.json is passed as JDBC connection argument:
!connect jdbc:calcite:model=target/test-classes/<my-model-path>.json︎
Schema Name
Geode Calcite Schema and Schema Factory
public class GeodeSchemaFactory implements SchemaFactory {
public Schema create(SchemaPlus parentSchema, String schemaName, Map<String, Object> operand) {
String locatorHost = (String) operand.get(“locatorHost”);
int locatorPort = …
String[] regionNames = …
String pdxPackagePath = …
return new GeodeSchema(locatorHost, locatorPort, regionNames, pdxPackagePath);
}
}
public class GeodeSchema extends AbstractSchema {
private String regionName = ..
protected Map<String, Table> getTableMap() {
final ImmutableMap.Builder<String, Table> builder = ImmutableMap.builder();
Region region = … Get Geode Region by region name …
Class valueClass= … Find region’s value type …
builder.put(regionName, new GeodeScannableTable(regionName, valueClass, clientCache));
return tableMap;
}
Retrieves the parameters set in
the model.json
Create an Adapter Schema
instance with the provided
parameters.
Create GeodeScannableTable
instance for each Geode Region
Geode Scannable Table
public class GeodeScannableTable extends AbstractTable implements ScannableTable {
public RelDataType getRowType(RelDataTypeFactory typeFactory) {
return new JavaTypeFactoryImpl().createStructType(valueClass);
}
public Enumerable<Object[]> scan(DataContext root) {
return new AbstractEnumerable<Object[]>() {
public Enumerator<Object[]> enumerator() { return new GeodeEnumerator<Object[]>(clientCache, regionName); }
}
public class GeodeEnumerator<E> implements Enumerator<E> {
private E current;
private SelectResults geodeIterator;
public GeodeEnumerator(ClientCache clientCache, String regionName) {
geodeterator = clientCache.getQueryService().newQuery("select * from /" + regionName).execute().iterator();
}
public boolean moveNext() { current = convert(geodeIterator.next()); return true;}
public E current() {return current;}
public abstract E convert(Object geodeValue) {
Convert PDX value into RelDataType row
}
Defined in the Linq4j sub-project
Retrieves the entire Region!!
Converts Geode value response into Calcite row data
Uses reflection (or pdx-instance) to builds
RelDataType from value’s class type
Returns an Enumeration over the entire
target data store
Geode Demo (Scannable Tables)
$ ./sqlline ︎
sqlline> !connect jdbc:calcite:model=target/test-classes/model2.json admin admin︎
︎
jdbc:calcite> !tables ︎
jdbc:calcite> SELECT * FROM "BookMaster”;︎
jdbc:calcite> SELECT "yearPublished", AVG("retailCost") AS “AvgRetailCost” FROM "BookMaster" GROUP BY "yearPublished";︎
jdbc:calcite> SELECT b."totalPrice", c."firstName” FROM "BookOrder" AS b INNER JOIN "Customer" AS c ON b."customerNumber" = c."customerNumber” WHERE b."totalPrice" > 0;︎
︎
︎
Without and With Implementation
Non-Relational Tables
26
Scanned without intermediate relational expression.
•  ScannableTable - can be scanned
•  FilterableTable - can be scanned, applying supplied filter expressions
•  ProjectableFilterableTable - can be scanned, applying supplied filter expressions
and projecting a given list of columns
Enumerable<Object[]> scan(DataContext root, List<RexNode> filters, int[] projects);
Enumerable<Object[]> scan(DataContext root, List<RexNode> filters);
Enumerable<Object[]> scan(DataContext root);
Calcite Ecosystem
27
Several “semi-independent” projects.
JDBC and Avatica Linq4j
Expression
Tree
Enumerable
Adapter
Relational
•  Relational Expressions
•  Row Expression
•  Optimization Rules
•  Planner …
SQL Parser & AST
Port of LINQ (Language-Integrated Query)
to Java.
Local and Remote
JDBC driver
Converts SQL
queries Into AST
(SqlNode …)
3rd party Adapters
Method for translating
executable code into data
(LINQ/MSN port)
Default (In-memory) Data
Store Adapter
implementation.
Leverages Linq4j
Relational Algebra,
expression,
optimizations …
Interpreter
Complies Java code
generated from linq4j
“Expressions”. Part of the
physical plan implementer
Calcite SQL Query Execution Flow
28
Enumerable
Interpreter
Prepare
SQL,
Relational,
Planner
Geode
Adapter
Binder
JDBC
Geode
Cluster
1
2
3
4
5
6 7
7
7
2. Parse SQL, convert to rel.
expressions. Validate and Optimize
them
3. Start building a physical plan from
the relation expressions
4. Implement the Geode relations and
encode them as Expression tree
5. Pass the Expression tree to the
Interpreter to generate Java code
6. Generate and Compile a Binder
instance that on ‘bind()’ call runs
Geodes’ query method
1. On new SQL query JDBC delegates
to Prepare to prepare the query
execution
7. JDBC uses the newly compiled
Binder to perform the query on the
Geode Cluster
Calcite Framework
Geode Adapter
2
Linq4j and Expression Tree
29
(Node) Visitor
Node
+ accept(Visitor)
+ evaluate(Node)
Expression
Statement
Block
Condition
For
Goto
Label
Switch
Throw
Try
While
Binary Constant MethodCall Parameter Member…
…
Queryable
Enumberable
QueryProvider
Bindable Generated Code
30
Calcite via Enumerable Converts Expressions into Java Code
Calcite Relational Expressions
31
RelNode
Relational
expression
TableScan
Project
Filter
Aggregate
Join
Intersect
Sort
RexlNode
Row-level
expressions
Project, Sort fields
Filter, Join conditions
Input Column
Ref
Literal
Struct field
access
Function call
Window
expressions
*
RelTrait
*
Physical attribute
of a relation
Calcite Relational Expressions (2)
32
RelNode
+ register(RelOptPlander)
+ List<RelNode> getInputs();
RelOptPlanner
+findBestExp():RelNode
RexNode
RelTrait Convention
NONE
*
*
EnumberableConvention
RelOptRule
+ onMatch(call)
<<register>>
<<create>>
MyDBConvention
ConverterRule
+ RelNode convert(RelNode)
Converts from one calling
convention to another
Convertor
Indicate that it converts a
physical attribute only!
<<rules>>
*
<<inputs>>
*
<<root>>
Query optimizer: Transforms a
relational expression according to
a given set of rules and a cost model.
RelOptCluster
Rule transforms an expression into another. It has a list of
Operands, which determine whether the rule can be applied to
a particular section of the tree.
RelOptRuleOperand
*<<fire criteria>>
Calling convention used
to represent a single
data source.
Inputs to a relational
expression must be in
the same convention
Calcite Adapter Patterns
33
MyAdapterRel
+ implement(implContext)
MyAdapterConvention
Convention.Impl(“MyAdapter”)
Common interface for all MyAdapter
Relation Expressions. Provides
implementation callback method called
as part of physical plan implementation
ImplContext
+ implParm1
+ implParm2 …
RelNode
MyAdapterTable
+ toRel(optTable)
+ asQueryable(provider,…)
MyAdapterQueryable
+ myQuery(params) :
Enumetator
TranslatableTable
<<instance of>>
AbstractQueryableTable
AbstractTableQueryable <<create>>
Can convert
queries in
Expression
myQuery() implements the call to your DB
It is called by the auto generated code. It
must return an Enumberable instance
MyAdapterScan
+ register(planer) {
Registers all MyAdapter Rules
}
<<create>>
MyAdapterToEnumerableConvertorRule
operands: (RelNode.class,
MyAdapterConvention, EnumerableConvention) ConverterRue
TableScan
MyAdapterToEnumerableConvertor
+ implement(EnumerableRelImplementor) {
ctx = new MyAdapterRel.ImplContext()
getImputs().implement(ctx)
return BlockBuild.append( MY_QUERY_REF,
Expressions.constant(ctx.implParms1),
Expressions.constant(ctx.implParms2) …
EnumerableRel
ConvertorImpl
<<create on match >>
MyAdapterProject
MyAdapterFilter
MyAdapterXXX
RelOptRule
MyAdapterProjectRu
MyAdapterFilterRule
MyAdapterXXXRule
<<create on match >>
Recursively call the implement on each
MyAdapter Relation Expression
Encode the myQuery(params) call as
Expressions
MY_QUERY_REF = Types.lookupMethod(
MyAdapterQueryable.class,
”myQuery”,
String.class
String.class);
1
3
4
5
2
6
7
8
9
Calcite Framework
MyAdapter components
Calcite with Geode - Without Implementation
34
SELECT b."totalPrice", c."firstName"
FROM "BookOrder" as b
INNER JOIN "Customer" as c ON b."customerNumber" = c."customerNumber"
WHERE b."totalPrice" > 0;
Calcite with Geode - With Implementation
35
SELECT b."totalPrice", c."firstName" FROM "BookOrder" as b INNER JOIN "Customer" as c
ON b."customerNumber" = c."customerNumber" WHERE b."totalPrice" > 0;
Calcite JDBC Connection
36
What About Testing?
37
Future work
38
•  Improve nested data structures support
•  Push down Join for collocated data sets
•  Push down the COUNT expression
•  Push down the ORDER BY expression (requires adding a DISTINCT aggregate
expression to the query)
•  Use new Geode OQL aggregation operations (http://bit.ly/2eKApd0) to push down
MIN, MAX, SUM, AVG aggregations
•  Beyond OQL (e.g. implement Join, aggregations with custom functions)
•  Leverage Calcite Streaming with Geode
References
39
•  Apache Geode Adapter for Apache Calcite: https://github.com/tzolov/calcite
•  Introduction to Apache Calcite (2016) : http://bit.ly/2fB1iBz
•  Apache Calcite Overview (2014) : http://bit.ly/2fMJgbS
•  Introduction to Apache Geode (2016) : http://bit.ly/1Rfztbd
•  Apache Calcite Project (2016) : https://calcite.apache.org
•  Apache Geode Project (2016) : http://geode.apache.org
•  Geode Object Query Language (OQL) : http://bit.ly/2eKywgp
•  Expression Tree Basic: http://bit.ly/2flBiXH
Using Apache Calcite for Enabling SQL and JDBC Access to Apache Geode and Other NoSQL Data Systems

Weitere ähnliche Inhalte

Was ist angesagt?

Cost-based Query Optimization in Apache Phoenix using Apache Calcite
Cost-based Query Optimization in Apache Phoenix using Apache CalciteCost-based Query Optimization in Apache Phoenix using Apache Calcite
Cost-based Query Optimization in Apache Phoenix using Apache CalciteJulian Hyde
 
Don’t optimize my queries, optimize my data!
Don’t optimize my queries, optimize my data!Don’t optimize my queries, optimize my data!
Don’t optimize my queries, optimize my data!Julian Hyde
 
Apache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them AllApache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them AllMichael Mior
 
Smarter Together - Bringing Relational Algebra, Powered by Apache Calcite, in...
Smarter Together - Bringing Relational Algebra, Powered by Apache Calcite, in...Smarter Together - Bringing Relational Algebra, Powered by Apache Calcite, in...
Smarter Together - Bringing Relational Algebra, Powered by Apache Calcite, in...Julian Hyde
 
Data all over the place! How SQL and Apache Calcite bring sanity to streaming...
Data all over the place! How SQL and Apache Calcite bring sanity to streaming...Data all over the place! How SQL and Apache Calcite bring sanity to streaming...
Data all over the place! How SQL and Apache Calcite bring sanity to streaming...Julian Hyde
 
Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcachedJurriaan Persyn
 
Streaming SQL with Apache Calcite
Streaming SQL with Apache CalciteStreaming SQL with Apache Calcite
Streaming SQL with Apache CalciteJulian Hyde
 
Morel, a Functional Query Language
Morel, a Functional Query LanguageMorel, a Functional Query Language
Morel, a Functional Query LanguageJulian Hyde
 
Spark SQL Deep Dive @ Melbourne Spark Meetup
Spark SQL Deep Dive @ Melbourne Spark MeetupSpark SQL Deep Dive @ Melbourne Spark Meetup
Spark SQL Deep Dive @ Melbourne Spark MeetupDatabricks
 
Data Federation with Apache Spark
Data Federation with Apache SparkData Federation with Apache Spark
Data Federation with Apache SparkDataWorks Summit
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearchpmanvi
 
The Apache Spark File Format Ecosystem
The Apache Spark File Format EcosystemThe Apache Spark File Format Ecosystem
The Apache Spark File Format EcosystemDatabricks
 
Fast federated SQL with Apache Calcite
Fast federated SQL with Apache CalciteFast federated SQL with Apache Calcite
Fast federated SQL with Apache CalciteChris Baynes
 
Performance Analysis of Apache Spark and Presto in Cloud Environments
Performance Analysis of Apache Spark and Presto in Cloud EnvironmentsPerformance Analysis of Apache Spark and Presto in Cloud Environments
Performance Analysis of Apache Spark and Presto in Cloud EnvironmentsDatabricks
 
A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets with Jules ...
A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets with Jules ...A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets with Jules ...
A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets with Jules ...Databricks
 
Integrating Apache Kafka and Elastic Using the Connect Framework
Integrating Apache Kafka and Elastic Using the Connect FrameworkIntegrating Apache Kafka and Elastic Using the Connect Framework
Integrating Apache Kafka and Elastic Using the Connect Frameworkconfluent
 
A Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLA Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLDatabricks
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & FeaturesDataStax Academy
 
Introduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processingIntroduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processingTill Rohrmann
 

Was ist angesagt? (20)

Cost-based Query Optimization in Apache Phoenix using Apache Calcite
Cost-based Query Optimization in Apache Phoenix using Apache CalciteCost-based Query Optimization in Apache Phoenix using Apache Calcite
Cost-based Query Optimization in Apache Phoenix using Apache Calcite
 
Don’t optimize my queries, optimize my data!
Don’t optimize my queries, optimize my data!Don’t optimize my queries, optimize my data!
Don’t optimize my queries, optimize my data!
 
Apache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them AllApache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them All
 
Smarter Together - Bringing Relational Algebra, Powered by Apache Calcite, in...
Smarter Together - Bringing Relational Algebra, Powered by Apache Calcite, in...Smarter Together - Bringing Relational Algebra, Powered by Apache Calcite, in...
Smarter Together - Bringing Relational Algebra, Powered by Apache Calcite, in...
 
Data all over the place! How SQL and Apache Calcite bring sanity to streaming...
Data all over the place! How SQL and Apache Calcite bring sanity to streaming...Data all over the place! How SQL and Apache Calcite bring sanity to streaming...
Data all over the place! How SQL and Apache Calcite bring sanity to streaming...
 
Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcached
 
Streaming SQL with Apache Calcite
Streaming SQL with Apache CalciteStreaming SQL with Apache Calcite
Streaming SQL with Apache Calcite
 
Apache Spark Architecture
Apache Spark ArchitectureApache Spark Architecture
Apache Spark Architecture
 
Morel, a Functional Query Language
Morel, a Functional Query LanguageMorel, a Functional Query Language
Morel, a Functional Query Language
 
Spark SQL Deep Dive @ Melbourne Spark Meetup
Spark SQL Deep Dive @ Melbourne Spark MeetupSpark SQL Deep Dive @ Melbourne Spark Meetup
Spark SQL Deep Dive @ Melbourne Spark Meetup
 
Data Federation with Apache Spark
Data Federation with Apache SparkData Federation with Apache Spark
Data Federation with Apache Spark
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearch
 
The Apache Spark File Format Ecosystem
The Apache Spark File Format EcosystemThe Apache Spark File Format Ecosystem
The Apache Spark File Format Ecosystem
 
Fast federated SQL with Apache Calcite
Fast federated SQL with Apache CalciteFast federated SQL with Apache Calcite
Fast federated SQL with Apache Calcite
 
Performance Analysis of Apache Spark and Presto in Cloud Environments
Performance Analysis of Apache Spark and Presto in Cloud EnvironmentsPerformance Analysis of Apache Spark and Presto in Cloud Environments
Performance Analysis of Apache Spark and Presto in Cloud Environments
 
A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets with Jules ...
A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets with Jules ...A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets with Jules ...
A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets with Jules ...
 
Integrating Apache Kafka and Elastic Using the Connect Framework
Integrating Apache Kafka and Elastic Using the Connect FrameworkIntegrating Apache Kafka and Elastic Using the Connect Framework
Integrating Apache Kafka and Elastic Using the Connect Framework
 
A Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLA Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQL
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & Features
 
Introduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processingIntroduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processing
 

Andere mochten auch

Apache Calcite overview
Apache Calcite overviewApache Calcite overview
Apache Calcite overviewJulian Hyde
 
Drill / SQL / Optiq
Drill / SQL / OptiqDrill / SQL / Optiq
Drill / SQL / OptiqJulian Hyde
 
SQL on everything, in memory
SQL on everything, in memorySQL on everything, in memory
SQL on everything, in memoryJulian Hyde
 
Building Apps with Distributed In-Memory Computing Using Apache Geode
Building Apps with Distributed In-Memory Computing Using Apache GeodeBuilding Apps with Distributed In-Memory Computing Using Apache Geode
Building Apps with Distributed In-Memory Computing Using Apache GeodePivotalOpenSourceHub
 
Building Effective Apache Geode Applications with Spring Data GemFire
Building Effective Apache Geode Applications with Spring Data GemFireBuilding Effective Apache Geode Applications with Spring Data GemFire
Building Effective Apache Geode Applications with Spring Data GemFireJohn Blum
 
Introducing Apache Geode and Spring Data GemFire
Introducing Apache Geode and Spring Data GemFireIntroducing Apache Geode and Spring Data GemFire
Introducing Apache Geode and Spring Data GemFireJohn Blum
 
Big Data, Simple and Fast: Addressing the Shortcomings of Hadoop
Big Data, Simple and Fast: Addressing the Shortcomings of HadoopBig Data, Simple and Fast: Addressing the Shortcomings of Hadoop
Big Data, Simple and Fast: Addressing the Shortcomings of HadoopHazelcast
 
CassieQ: The Distributed Message Queue Built on Cassandra (Anton Kropp, Cural...
CassieQ: The Distributed Message Queue Built on Cassandra (Anton Kropp, Cural...CassieQ: The Distributed Message Queue Built on Cassandra (Anton Kropp, Cural...
CassieQ: The Distributed Message Queue Built on Cassandra (Anton Kropp, Cural...DataStax
 
Why you care about
 relational algebra (even though you didn’t know it)
Why you care about
 relational algebra (even though you didn’t know it)Why you care about
 relational algebra (even though you didn’t know it)
Why you care about
 relational algebra (even though you didn’t know it)Julian Hyde
 
IMCSummit 2015 - 1 IT Business - The Evolution of Pivotal Gemfire
IMCSummit 2015 - 1 IT Business  - The Evolution of Pivotal GemfireIMCSummit 2015 - 1 IT Business  - The Evolution of Pivotal Gemfire
IMCSummit 2015 - 1 IT Business - The Evolution of Pivotal GemfireIn-Memory Computing Summit
 
Calcite meetup-2016-04-20
Calcite meetup-2016-04-20Calcite meetup-2016-04-20
Calcite meetup-2016-04-20Josh Elser
 
#GeodeSummit - Off-Heap Storage Current and Future Design
#GeodeSummit - Off-Heap Storage Current and Future Design#GeodeSummit - Off-Heap Storage Current and Future Design
#GeodeSummit - Off-Heap Storage Current and Future DesignPivotalOpenSourceHub
 
#GeodeSummit - Redis to Geode Adaptor
#GeodeSummit - Redis to Geode Adaptor#GeodeSummit - Redis to Geode Adaptor
#GeodeSummit - Redis to Geode AdaptorPivotalOpenSourceHub
 
#GeodeSummit - Large Scale Fraud Detection using GemFire Integrated with Gree...
#GeodeSummit - Large Scale Fraud Detection using GemFire Integrated with Gree...#GeodeSummit - Large Scale Fraud Detection using GemFire Integrated with Gree...
#GeodeSummit - Large Scale Fraud Detection using GemFire Integrated with Gree...PivotalOpenSourceHub
 
High performance queues with Cassandra
High performance queues with CassandraHigh performance queues with Cassandra
High performance queues with CassandraMikalai Alimenkou
 
Streaming SQL (at FlinkForward, Berlin, 2016/09/12)
Streaming SQL (at FlinkForward, Berlin, 2016/09/12)Streaming SQL (at FlinkForward, Berlin, 2016/09/12)
Streaming SQL (at FlinkForward, Berlin, 2016/09/12)Julian Hyde
 
Apache Geode で始める Spring Data Gemfire
Apache Geode で始めるSpring Data GemfireApache Geode で始めるSpring Data Gemfire
Apache Geode で始める Spring Data GemfireAkihiro Kitada
 
Aggregated queries with Druid on terrabytes and petabytes of data
Aggregated queries with Druid on terrabytes and petabytes of dataAggregated queries with Druid on terrabytes and petabytes of data
Aggregated queries with Druid on terrabytes and petabytes of dataRostislav Pashuto
 

Andere mochten auch (20)

Apache Calcite overview
Apache Calcite overviewApache Calcite overview
Apache Calcite overview
 
Drill / SQL / Optiq
Drill / SQL / OptiqDrill / SQL / Optiq
Drill / SQL / Optiq
 
SQL on everything, in memory
SQL on everything, in memorySQL on everything, in memory
SQL on everything, in memory
 
Building Apps with Distributed In-Memory Computing Using Apache Geode
Building Apps with Distributed In-Memory Computing Using Apache GeodeBuilding Apps with Distributed In-Memory Computing Using Apache Geode
Building Apps with Distributed In-Memory Computing Using Apache Geode
 
Building Effective Apache Geode Applications with Spring Data GemFire
Building Effective Apache Geode Applications with Spring Data GemFireBuilding Effective Apache Geode Applications with Spring Data GemFire
Building Effective Apache Geode Applications with Spring Data GemFire
 
Introducing Apache Geode and Spring Data GemFire
Introducing Apache Geode and Spring Data GemFireIntroducing Apache Geode and Spring Data GemFire
Introducing Apache Geode and Spring Data GemFire
 
Big Data, Simple and Fast: Addressing the Shortcomings of Hadoop
Big Data, Simple and Fast: Addressing the Shortcomings of HadoopBig Data, Simple and Fast: Addressing the Shortcomings of Hadoop
Big Data, Simple and Fast: Addressing the Shortcomings of Hadoop
 
CassieQ: The Distributed Message Queue Built on Cassandra (Anton Kropp, Cural...
CassieQ: The Distributed Message Queue Built on Cassandra (Anton Kropp, Cural...CassieQ: The Distributed Message Queue Built on Cassandra (Anton Kropp, Cural...
CassieQ: The Distributed Message Queue Built on Cassandra (Anton Kropp, Cural...
 
Why you care about
 relational algebra (even though you didn’t know it)
Why you care about
 relational algebra (even though you didn’t know it)Why you care about
 relational algebra (even though you didn’t know it)
Why you care about
 relational algebra (even though you didn’t know it)
 
IMCSummit 2015 - 1 IT Business - The Evolution of Pivotal Gemfire
IMCSummit 2015 - 1 IT Business  - The Evolution of Pivotal GemfireIMCSummit 2015 - 1 IT Business  - The Evolution of Pivotal Gemfire
IMCSummit 2015 - 1 IT Business - The Evolution of Pivotal Gemfire
 
Calcite meetup-2016-04-20
Calcite meetup-2016-04-20Calcite meetup-2016-04-20
Calcite meetup-2016-04-20
 
#GeodeSummit - Off-Heap Storage Current and Future Design
#GeodeSummit - Off-Heap Storage Current and Future Design#GeodeSummit - Off-Heap Storage Current and Future Design
#GeodeSummit - Off-Heap Storage Current and Future Design
 
#GeodeSummit - Redis to Geode Adaptor
#GeodeSummit - Redis to Geode Adaptor#GeodeSummit - Redis to Geode Adaptor
#GeodeSummit - Redis to Geode Adaptor
 
#GeodeSummit - Large Scale Fraud Detection using GemFire Integrated with Gree...
#GeodeSummit - Large Scale Fraud Detection using GemFire Integrated with Gree...#GeodeSummit - Large Scale Fraud Detection using GemFire Integrated with Gree...
#GeodeSummit - Large Scale Fraud Detection using GemFire Integrated with Gree...
 
High performance queues with Cassandra
High performance queues with CassandraHigh performance queues with Cassandra
High performance queues with Cassandra
 
Streaming SQL (at FlinkForward, Berlin, 2016/09/12)
Streaming SQL (at FlinkForward, Berlin, 2016/09/12)Streaming SQL (at FlinkForward, Berlin, 2016/09/12)
Streaming SQL (at FlinkForward, Berlin, 2016/09/12)
 
Streaming SQL
Streaming SQLStreaming SQL
Streaming SQL
 
Apache Hive 2.0: SQL, Speed, Scale
Apache Hive 2.0: SQL, Speed, ScaleApache Hive 2.0: SQL, Speed, Scale
Apache Hive 2.0: SQL, Speed, Scale
 
Apache Geode で始める Spring Data Gemfire
Apache Geode で始めるSpring Data GemfireApache Geode で始めるSpring Data Gemfire
Apache Geode で始める Spring Data Gemfire
 
Aggregated queries with Druid on terrabytes and petabytes of data
Aggregated queries with Druid on terrabytes and petabytes of dataAggregated queries with Druid on terrabytes and petabytes of data
Aggregated queries with Druid on terrabytes and petabytes of data
 

Ähnlich wie Using Apache Calcite for Enabling SQL and JDBC Access to Apache Geode and Other NoSQL Data Systems

Introduction to Apache Geode (Cork, Ireland)
Introduction to Apache Geode (Cork, Ireland)Introduction to Apache Geode (Cork, Ireland)
Introduction to Apache Geode (Cork, Ireland)Anthony Baker
 
Apache Geode Meetup, Cork, Ireland at CIT
Apache Geode Meetup, Cork, Ireland at CITApache Geode Meetup, Cork, Ireland at CIT
Apache Geode Meetup, Cork, Ireland at CITApache Geode
 
Apache Kylin: OLAP Engine on Hadoop - Tech Deep Dive
Apache Kylin: OLAP Engine on Hadoop - Tech Deep DiveApache Kylin: OLAP Engine on Hadoop - Tech Deep Dive
Apache Kylin: OLAP Engine on Hadoop - Tech Deep DiveXu Jiang
 
StackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStackStackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStackChiradeep Vittal
 
IBM Cloud Native Day April 2021: Serverless Data Lake
IBM Cloud Native Day April 2021: Serverless Data LakeIBM Cloud Native Day April 2021: Serverless Data Lake
IBM Cloud Native Day April 2021: Serverless Data LakeTorsten Steinbach
 
Real time analytics at uber @ strata data 2019
Real time analytics at uber @ strata data 2019Real time analytics at uber @ strata data 2019
Real time analytics at uber @ strata data 2019Zhenxiao Luo
 
Expose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridExpose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridVinay Kumar
 
Apache conbigdata2015 christiantzolov-federated sql on hadoop and beyond- lev...
Apache conbigdata2015 christiantzolov-federated sql on hadoop and beyond- lev...Apache conbigdata2015 christiantzolov-federated sql on hadoop and beyond- lev...
Apache conbigdata2015 christiantzolov-federated sql on hadoop and beyond- lev...Christian Tzolov
 
A Smarter Pig: Building a SQL interface to Pig using Apache Calcite
A Smarter Pig: Building a SQL interface to Pig using Apache CalciteA Smarter Pig: Building a SQL interface to Pig using Apache Calcite
A Smarter Pig: Building a SQL interface to Pig using Apache CalciteSalesforce Engineering
 
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...Mark Rittman
 
xPatterns on Spark, Shark, Mesos, Tachyon
xPatterns on Spark, Shark, Mesos, TachyonxPatterns on Spark, Shark, Mesos, Tachyon
xPatterns on Spark, Shark, Mesos, TachyonClaudiu Barbura
 
SQL on Hadoop
SQL on HadoopSQL on Hadoop
SQL on Hadoopnvvrajesh
 
Presto talk @ Global AI conference 2018 Boston
Presto talk @ Global AI conference 2018 BostonPresto talk @ Global AI conference 2018 Boston
Presto talk @ Global AI conference 2018 Bostonkbajda
 
MySQL 8 loves JavaScript
MySQL 8 loves JavaScript MySQL 8 loves JavaScript
MySQL 8 loves JavaScript Sanjay Manwani
 
Виталий Бондаренко "Fast Data Platform for Real-Time Analytics. Architecture ...
Виталий Бондаренко "Fast Data Platform for Real-Time Analytics. Architecture ...Виталий Бондаренко "Fast Data Platform for Real-Time Analytics. Architecture ...
Виталий Бондаренко "Fast Data Platform for Real-Time Analytics. Architecture ...Fwdays
 
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...Yahoo Developer Network
 

Ähnlich wie Using Apache Calcite for Enabling SQL and JDBC Access to Apache Geode and Other NoSQL Data Systems (20)

Introduction to Apache Geode (Cork, Ireland)
Introduction to Apache Geode (Cork, Ireland)Introduction to Apache Geode (Cork, Ireland)
Introduction to Apache Geode (Cork, Ireland)
 
Apache Geode Meetup, Cork, Ireland at CIT
Apache Geode Meetup, Cork, Ireland at CITApache Geode Meetup, Cork, Ireland at CIT
Apache Geode Meetup, Cork, Ireland at CIT
 
Apache Kylin: OLAP Engine on Hadoop - Tech Deep Dive
Apache Kylin: OLAP Engine on Hadoop - Tech Deep DiveApache Kylin: OLAP Engine on Hadoop - Tech Deep Dive
Apache Kylin: OLAP Engine on Hadoop - Tech Deep Dive
 
20170126 big data processing
20170126 big data processing20170126 big data processing
20170126 big data processing
 
StackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStackStackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStack
 
IBM Cloud Native Day April 2021: Serverless Data Lake
IBM Cloud Native Day April 2021: Serverless Data LakeIBM Cloud Native Day April 2021: Serverless Data Lake
IBM Cloud Native Day April 2021: Serverless Data Lake
 
Real time analytics at uber @ strata data 2019
Real time analytics at uber @ strata data 2019Real time analytics at uber @ strata data 2019
Real time analytics at uber @ strata data 2019
 
Ntg web services
Ntg   web servicesNtg   web services
Ntg web services
 
Expose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridExpose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug Madrid
 
KSQL Intro
KSQL IntroKSQL Intro
KSQL Intro
 
Oracle OpenWorld 2014 Review Part Four - PaaS Middleware
Oracle OpenWorld 2014 Review Part Four - PaaS MiddlewareOracle OpenWorld 2014 Review Part Four - PaaS Middleware
Oracle OpenWorld 2014 Review Part Four - PaaS Middleware
 
Apache conbigdata2015 christiantzolov-federated sql on hadoop and beyond- lev...
Apache conbigdata2015 christiantzolov-federated sql on hadoop and beyond- lev...Apache conbigdata2015 christiantzolov-federated sql on hadoop and beyond- lev...
Apache conbigdata2015 christiantzolov-federated sql on hadoop and beyond- lev...
 
A Smarter Pig: Building a SQL interface to Pig using Apache Calcite
A Smarter Pig: Building a SQL interface to Pig using Apache CalciteA Smarter Pig: Building a SQL interface to Pig using Apache Calcite
A Smarter Pig: Building a SQL interface to Pig using Apache Calcite
 
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...
 
xPatterns on Spark, Shark, Mesos, Tachyon
xPatterns on Spark, Shark, Mesos, TachyonxPatterns on Spark, Shark, Mesos, Tachyon
xPatterns on Spark, Shark, Mesos, Tachyon
 
SQL on Hadoop
SQL on HadoopSQL on Hadoop
SQL on Hadoop
 
Presto talk @ Global AI conference 2018 Boston
Presto talk @ Global AI conference 2018 BostonPresto talk @ Global AI conference 2018 Boston
Presto talk @ Global AI conference 2018 Boston
 
MySQL 8 loves JavaScript
MySQL 8 loves JavaScript MySQL 8 loves JavaScript
MySQL 8 loves JavaScript
 
Виталий Бондаренко "Fast Data Platform for Real-Time Analytics. Architecture ...
Виталий Бондаренко "Fast Data Platform for Real-Time Analytics. Architecture ...Виталий Бондаренко "Fast Data Platform for Real-Time Analytics. Architecture ...
Виталий Бондаренко "Fast Data Platform for Real-Time Analytics. Architecture ...
 
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...
 

Kürzlich hochgeladen

Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 

Kürzlich hochgeladen (20)

Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 

Using Apache Calcite for Enabling SQL and JDBC Access to Apache Geode and Other NoSQL Data Systems

  • 1. Apache Calcite for Enabling SQL Access to NoSQL Data Systems such as Apache Geode Christian Tzolov
  • 2. 2 Christian Tzolov Engineer at Pivotal, Big-Data, Hadoop, Spring Cloud Dataflow, Apache Geode, Apache HAWQ, Apache Committer, Apache Crunch PMC member ctzolov@pivotal.io blog.tzolov.net Twitter: @christzolov https://nl.linkedin.com/in/tzolov Whoami Disclaimer This talk expresses my personal opinions. It is not read or approved by Pivotal and does not necessarily reflect the views and opinions of Pivotal nor does it constitute any official communication of Pivotal. Pivotal does not support any of the code shared here.
  • 3. 3 Big Data Landscape 2016 •  Volume •  Velocity •  Varity •  Scalability •  Latency •  CAP - Consistency vs. Availability
  • 4. 4 •  SQL •  Custom APIs –  Key / Value –  Fluid API –  REST API •  {My} Query Language Unified Access? At What Cost? Data Access
  • 5. 5 •  Apache Apex •  Apache Drill •  Apache Flink •  Apache Hive •  Apache Kylin •  Apache Phoenix •  Apache Samza •  Apache Storm •  Cascading •  Qubole Quark •  SQL-Gremlin … SQL? •  Apache Geode
  • 6. Calcite Geode Adapter - Overview Geode API and OQL SQL/JDBC/ODBC Convert SQL relational expressions into OQL queriesGeode Adapter (Geode Client) Geode ServerGeode ServerGeode Server Data Data Data Push down the relational expressions supported by Geode OQL and falls back to the Calcite Enumerable Adapter for the rest Enumerable Adapter Apache Calcite Spring Data Geode Spring Data API for interacting with Geode Parse SQL, converts into relational expression and optimizes
  • 7. Relational Expressions and Optimization 7 Scan Scan Join Filter Project Customer (c) BookOrder (b) on customerNumber b.totalPrice > 0 c.firstName, b.totalPrice SELECT b."totalPrice", c."firstName” FROM "BookOrder" as b INNER JOIN "Customer" as c ON b."customerNumber" = c."customerNumber” WHERE b."totalPrice" > 0; Scan Scan Join Project Customer (c) BookOrder (b) on customerNumber totalPrice > 0 c.firstName, b.totalPrice Project firstName, customerNumber Filter totalPrice, customerNumberProject Optimiz
  • 8. Push Down Candidates 8 Relational Operator Geode Support LIMIT Supported without FETCH PROJECTION Supported FILTER Supported JOIN Only for collocated data AGGREGATE Only for MAX, MIN, SUM, AVG SORT Requires DISTINCT statement Implemented
  • 9. Apache Geode? “… in-memory, distributed database with strong consistency built to support low latency transactional applications at extreme scale”
  • 10. Why Apache Geode? 10 5,700 train stations 4.5 million tickets per day 20 million daily users 1.4 billion page views per day 40,000 visits per second 7,000 stations 72,000 miles of track 23 million passengers daily 120,000 concurrent users 10,000 transactions per minute https://pivotal.io/big-data/case-study/distributed-in-memory-data-management-solution https://pivotal.io/big-data/case-study/scaling-online-sales-for-the-largest-railway-in-the-world-china-railway-corporation China Railway
  • 11. 11 •  In-Memory Data Storage –  > 100TB memory –  JVM Heap + Off Heap •  Any Data Format –  Key-Value/Object Store •  ACID Compliant Transactions •  HA and Linear Scalability •  Strong Consistency •  Streaming and Event Processing –  Listeners –  Distributed Functions –  Continuous OQL Queries •  Multi-site / Inter-cluster •  Embedded and Standalone •  Top Level Apache Project Apache Geode Features
  • 12. Apache Geode Concepts Cache Server (member) Cache Region 1 Region N ValKe y v1k1 v2k2 … Cache - In-memory collection of Regions Region - consistent, distributed Map (key-value), Partitioned or Replicated CacheServer – process connected to the distributed system with created Cache Client (member)Locator (member) Client –read and modify the content of the distributed system Locator – tracks system members and provides membership information … Listeners Functions Functions – distributed, concurrent data processing Listener – event handler. Registers for one or more events and notified when they occur
  • 13. Geode Topologies Cache ServerCache ServerCache Server Cache Data Cache Data Cache Data Peer-to-Peer Cache ServerCache ServerCache Server Cache Data Cache Data Cache Data Client Local Cache pool Client-Server Cache Server Cache Server Gateway Sender … Cache Server Gateway Receiver Cache ServerCache Server Cache Data Cache Data Cache Data Cache Data Gateway Receiver Cache Server … Gateway Sender Cache ServerCache Server Cache Data Cache Data Cache Data Cache Data WAN Multi-site Boundary Multi-Site
  • 14. Geode Client API •  Client Cache •  Key / Value - Region GET, PUT, REMOVE •  OQL – QueryService
  • 15. Geode Data Types & Serialization •  Key-Value with complex value formats •  Portable Data eXchange (PDX) Serialization – Delta propagation, schema evolution, polyglot support … •  Object Query Language (OQL) SELECT p.name FROM /Person p WHERE p.pet.type = “dino” { id: 1, name: “Fred”, age: 42, pet: { name: “Barney”, type: “dino” } } single field deserialization nested fields
  • 16. Geode Demo (GFSH and OQL) •  Connect to Geode cluster, •  List available Regions •  Run OQL query
  • 17. Apache Calcite? Java framework that allows SQL interface and advanced query optimization, for virtually any data system •  Query Parser, Validator and Optimizer(s) •  Local/Remote JDBC drivers •  Streaming •  Agnostic to how data is stored and process •  Balance SQL completes vs. integrity of Data system native capabilities
  • 18. Apache Calcite Data Types •  Catalog – namespaces accessed in queries •  Schema - collection of schemas and tables •  Table - single data set, collection of rows •  RelDataType – SQL fields types in a Table Your Data System Data System Data Types Calcite Schema SQL Engine Table Table JDBC Table… Data Type Mapping SELECT title, author FROM test.BookMaster Data Type Fields Schema Table
  • 19. Calcite Data Types: RelDataType 19 Type of a scalar expression or row •  RelDataTypeFactory – RelDataType factory •  JavaTypeFactory - registers Java classes as record types •  JavaTypeFactoryImpl - Java Reflection to build RelDataTypes •  SqlTypeFactoryImpl - Default implementation with all SQL types
  • 20. Geode to Calcite Data Types Mapping 20 Geode Cache Region 1 Region K ValKey v1k1 v2k2 … Calcite Schema Table 1 Table K Col1 Col2 ColN V(M,1)RowM V(M,2) V(M,N) V(2,1)Row2 V(2,2) V(2,N) V(1,1)Row1 V(1,2) V(1,N) … Regions are mapped into Tables Geode Cache is mapped into Calcite Schema Geode Key/Value is mapped into Table Row Create Column Types (RelDataType) from Geode Value class (JavaTypeFactoryImpl)
  • 21. Calcite Bootstrap Flow 21 Typical calcite initialization flow Model (JSON) SchemaFactory Schema Tables Creates Creates Configures Calcite Creates
  • 22. Calcite Model { version: '1.0', defaultSchema: 'TEST', schemas: [ { name: 'TEST', type: 'custom', factory: 'org.apache.calcite.adapter.geode.simple.GeodeSchemaFactory', operand: { locatorHost: 'localhost', locatorPort: '10334', regions: 'BookMaster', pdxSerializablePackagePath: 'net.tzolov.geode.bookstore.domain.*' } }] } Reference to your adapter schema factory implementation class Parameters to be passed to your adapter schema factory implementation The path to <my-model>.json is passed as JDBC connection argument: !connect jdbc:calcite:model=target/test-classes/<my-model-path>.json︎ Schema Name
  • 23. Geode Calcite Schema and Schema Factory public class GeodeSchemaFactory implements SchemaFactory { public Schema create(SchemaPlus parentSchema, String schemaName, Map<String, Object> operand) { String locatorHost = (String) operand.get(“locatorHost”); int locatorPort = … String[] regionNames = … String pdxPackagePath = … return new GeodeSchema(locatorHost, locatorPort, regionNames, pdxPackagePath); } } public class GeodeSchema extends AbstractSchema { private String regionName = .. protected Map<String, Table> getTableMap() { final ImmutableMap.Builder<String, Table> builder = ImmutableMap.builder(); Region region = … Get Geode Region by region name … Class valueClass= … Find region’s value type … builder.put(regionName, new GeodeScannableTable(regionName, valueClass, clientCache)); return tableMap; } Retrieves the parameters set in the model.json Create an Adapter Schema instance with the provided parameters. Create GeodeScannableTable instance for each Geode Region
  • 24. Geode Scannable Table public class GeodeScannableTable extends AbstractTable implements ScannableTable { public RelDataType getRowType(RelDataTypeFactory typeFactory) { return new JavaTypeFactoryImpl().createStructType(valueClass); } public Enumerable<Object[]> scan(DataContext root) { return new AbstractEnumerable<Object[]>() { public Enumerator<Object[]> enumerator() { return new GeodeEnumerator<Object[]>(clientCache, regionName); } } public class GeodeEnumerator<E> implements Enumerator<E> { private E current; private SelectResults geodeIterator; public GeodeEnumerator(ClientCache clientCache, String regionName) { geodeterator = clientCache.getQueryService().newQuery("select * from /" + regionName).execute().iterator(); } public boolean moveNext() { current = convert(geodeIterator.next()); return true;} public E current() {return current;} public abstract E convert(Object geodeValue) { Convert PDX value into RelDataType row } Defined in the Linq4j sub-project Retrieves the entire Region!! Converts Geode value response into Calcite row data Uses reflection (or pdx-instance) to builds RelDataType from value’s class type Returns an Enumeration over the entire target data store
  • 25. Geode Demo (Scannable Tables) $ ./sqlline ︎ sqlline> !connect jdbc:calcite:model=target/test-classes/model2.json admin admin︎ ︎ jdbc:calcite> !tables ︎ jdbc:calcite> SELECT * FROM "BookMaster”;︎ jdbc:calcite> SELECT "yearPublished", AVG("retailCost") AS “AvgRetailCost” FROM "BookMaster" GROUP BY "yearPublished";︎ jdbc:calcite> SELECT b."totalPrice", c."firstName” FROM "BookOrder" AS b INNER JOIN "Customer" AS c ON b."customerNumber" = c."customerNumber” WHERE b."totalPrice" > 0;︎ ︎ ︎ Without and With Implementation
  • 26. Non-Relational Tables 26 Scanned without intermediate relational expression. •  ScannableTable - can be scanned •  FilterableTable - can be scanned, applying supplied filter expressions •  ProjectableFilterableTable - can be scanned, applying supplied filter expressions and projecting a given list of columns Enumerable<Object[]> scan(DataContext root, List<RexNode> filters, int[] projects); Enumerable<Object[]> scan(DataContext root, List<RexNode> filters); Enumerable<Object[]> scan(DataContext root);
  • 27. Calcite Ecosystem 27 Several “semi-independent” projects. JDBC and Avatica Linq4j Expression Tree Enumerable Adapter Relational •  Relational Expressions •  Row Expression •  Optimization Rules •  Planner … SQL Parser & AST Port of LINQ (Language-Integrated Query) to Java. Local and Remote JDBC driver Converts SQL queries Into AST (SqlNode …) 3rd party Adapters Method for translating executable code into data (LINQ/MSN port) Default (In-memory) Data Store Adapter implementation. Leverages Linq4j Relational Algebra, expression, optimizations … Interpreter Complies Java code generated from linq4j “Expressions”. Part of the physical plan implementer
  • 28. Calcite SQL Query Execution Flow 28 Enumerable Interpreter Prepare SQL, Relational, Planner Geode Adapter Binder JDBC Geode Cluster 1 2 3 4 5 6 7 7 7 2. Parse SQL, convert to rel. expressions. Validate and Optimize them 3. Start building a physical plan from the relation expressions 4. Implement the Geode relations and encode them as Expression tree 5. Pass the Expression tree to the Interpreter to generate Java code 6. Generate and Compile a Binder instance that on ‘bind()’ call runs Geodes’ query method 1. On new SQL query JDBC delegates to Prepare to prepare the query execution 7. JDBC uses the newly compiled Binder to perform the query on the Geode Cluster Calcite Framework Geode Adapter 2
  • 29. Linq4j and Expression Tree 29 (Node) Visitor Node + accept(Visitor) + evaluate(Node) Expression Statement Block Condition For Goto Label Switch Throw Try While Binary Constant MethodCall Parameter Member… … Queryable Enumberable QueryProvider
  • 30. Bindable Generated Code 30 Calcite via Enumerable Converts Expressions into Java Code
  • 31. Calcite Relational Expressions 31 RelNode Relational expression TableScan Project Filter Aggregate Join Intersect Sort RexlNode Row-level expressions Project, Sort fields Filter, Join conditions Input Column Ref Literal Struct field access Function call Window expressions * RelTrait * Physical attribute of a relation
  • 32. Calcite Relational Expressions (2) 32 RelNode + register(RelOptPlander) + List<RelNode> getInputs(); RelOptPlanner +findBestExp():RelNode RexNode RelTrait Convention NONE * * EnumberableConvention RelOptRule + onMatch(call) <<register>> <<create>> MyDBConvention ConverterRule + RelNode convert(RelNode) Converts from one calling convention to another Convertor Indicate that it converts a physical attribute only! <<rules>> * <<inputs>> * <<root>> Query optimizer: Transforms a relational expression according to a given set of rules and a cost model. RelOptCluster Rule transforms an expression into another. It has a list of Operands, which determine whether the rule can be applied to a particular section of the tree. RelOptRuleOperand *<<fire criteria>> Calling convention used to represent a single data source. Inputs to a relational expression must be in the same convention
  • 33. Calcite Adapter Patterns 33 MyAdapterRel + implement(implContext) MyAdapterConvention Convention.Impl(“MyAdapter”) Common interface for all MyAdapter Relation Expressions. Provides implementation callback method called as part of physical plan implementation ImplContext + implParm1 + implParm2 … RelNode MyAdapterTable + toRel(optTable) + asQueryable(provider,…) MyAdapterQueryable + myQuery(params) : Enumetator TranslatableTable <<instance of>> AbstractQueryableTable AbstractTableQueryable <<create>> Can convert queries in Expression myQuery() implements the call to your DB It is called by the auto generated code. It must return an Enumberable instance MyAdapterScan + register(planer) { Registers all MyAdapter Rules } <<create>> MyAdapterToEnumerableConvertorRule operands: (RelNode.class, MyAdapterConvention, EnumerableConvention) ConverterRue TableScan MyAdapterToEnumerableConvertor + implement(EnumerableRelImplementor) { ctx = new MyAdapterRel.ImplContext() getImputs().implement(ctx) return BlockBuild.append( MY_QUERY_REF, Expressions.constant(ctx.implParms1), Expressions.constant(ctx.implParms2) … EnumerableRel ConvertorImpl <<create on match >> MyAdapterProject MyAdapterFilter MyAdapterXXX RelOptRule MyAdapterProjectRu MyAdapterFilterRule MyAdapterXXXRule <<create on match >> Recursively call the implement on each MyAdapter Relation Expression Encode the myQuery(params) call as Expressions MY_QUERY_REF = Types.lookupMethod( MyAdapterQueryable.class, ”myQuery”, String.class String.class); 1 3 4 5 2 6 7 8 9 Calcite Framework MyAdapter components
  • 34. Calcite with Geode - Without Implementation 34 SELECT b."totalPrice", c."firstName" FROM "BookOrder" as b INNER JOIN "Customer" as c ON b."customerNumber" = c."customerNumber" WHERE b."totalPrice" > 0;
  • 35. Calcite with Geode - With Implementation 35 SELECT b."totalPrice", c."firstName" FROM "BookOrder" as b INNER JOIN "Customer" as c ON b."customerNumber" = c."customerNumber" WHERE b."totalPrice" > 0;
  • 38. Future work 38 •  Improve nested data structures support •  Push down Join for collocated data sets •  Push down the COUNT expression •  Push down the ORDER BY expression (requires adding a DISTINCT aggregate expression to the query) •  Use new Geode OQL aggregation operations (http://bit.ly/2eKApd0) to push down MIN, MAX, SUM, AVG aggregations •  Beyond OQL (e.g. implement Join, aggregations with custom functions) •  Leverage Calcite Streaming with Geode
  • 39. References 39 •  Apache Geode Adapter for Apache Calcite: https://github.com/tzolov/calcite •  Introduction to Apache Calcite (2016) : http://bit.ly/2fB1iBz •  Apache Calcite Overview (2014) : http://bit.ly/2fMJgbS •  Introduction to Apache Geode (2016) : http://bit.ly/1Rfztbd •  Apache Calcite Project (2016) : https://calcite.apache.org •  Apache Geode Project (2016) : http://geode.apache.org •  Geode Object Query Language (OQL) : http://bit.ly/2eKywgp •  Expression Tree Basic: http://bit.ly/2flBiXH