Partition pruning
Partition pruning is an IMap-specific query optimization technique that automatically prunes members that don’t contain the required data on their partitions, and optimizes the count of Jet scan processors on required members.
|
The partition pruning may be used only when querying an IMap mapping if the partitioning strategy attribute is enabled. |
The query coordinator member is always involved in the query execution, even if it doesn’t contain any required data. |
Example
The following example shows the config updates for the IMap partitioning strategy on the Java side, and the SQL query that enables the partition pruning optimizations.
Java:
// first, define a complex key class
class ComplexKey implemetns Serializable {
private String k1;
private int k2;
public ComplexKey(String k1, int k2) {
this.k1 = k1;
this.k2 = k2;
}
public String getK1() {
return k1;
}
public int getK2() {
return k2;
}
// equals and hashCode omitted for brevity
}
// then, define a map name and configure the map with a partitioning strategy
String mapName = "map";
hz.addMapConfig(new MapConfig(mapName).setPartitioningAttributeConfigs("k2"));
// create IMap and populate it with some data
IMap<ComplexKey, String> map = hz.getMap(mapName);
map.put(new ComplexKey("k1", 21), "v1");
map.put(new ComplexKey("k2", 42), "v2");
SQL queries:
-- Create a mapping to observe IMap in SQL context;
CREATE MAPPING map (k1 VARCHAR, k2 INT, v VARCHAR)
TYPE IMap
OPTIONS ('keyFormat' = 'java', 'valueFormat' = 'varchar');
-- Query IMap with a predicate allowing partition pruning;
SELECT * FROM cities WHERE k2 = 42;