Query Pushdown
This page outlines the different ways pushdown of a query to TileDB is supported
MyTile supports pushing down parts of a query from MariaDB to TileDB. Currently this is done through the cond_push
support in MariaDB and we are evaluating the newer select_handler
support introduced in MariaDB 10.4.
Joins
Joins are optimized with bulk pushdown of the join keys through batched key access.
Predicate Pushdown Support
MyTile analyzes the WHERE
clause of SQL statements and pushes down the following conditions:
Type
Example
Basic Predicates
x = 10
x BETWEEN 0 and 11
Datetime Conditions
y <= '2021-01-01'
y >= '2021-01-01' - INTERVAL 1 DAY
ASCII String Conditions
z = 'hello'
z > 'he'
How It Works
Predicates on Dimensions
Predicates listed for a dimension are collected and turned into TileDB ranges for a multi-range query. Conditions here are merged into so called "super ranges" if there is overlap or adjacency. These are then issued as multi-range queries.
Predicates on Attributes
Predicates given for attributes are converted into TileDB Query Conditions that are applied to the attributes. Query conditions allow TileDB to filter cells based on the conditions at the the storage level in a highly efficient and multi-threaded manner.
Unsupported Pushdown
The following predicate types are not supported:
Field comparisons
x = y
Function comparisons
x = utc_timestamp()
Geometric functions
ST_WITHIN(x, polygon(point(1,2), point(2, 2), point(2, 1), point(1,1)))
Validating Pushdown
Running an EXPLAIN
will show if the predicate pushdown is being used:
Aggregate Pushdown
Currently aggregate pushdowns like COUNT(*)
or AVG
are not supported. Queries that include such functions will work as expected, however, MariaDB itself will perform these operations instead of TileDB. Aggregate, window functions and more are on the roadmap for futher pushdown where performance benefits can be gained.
Last updated