Support for secondary index
Aerospike 6.0 EE introduces extensive support for secondary index. The Spark connector leverages the secondary index to reduce query latency.
Prerequisites
- Aerospike database 6.0 or later
- Spark connector 3.4.0 or later
Notes on filter string aerospike.sindex.filter:
-
Connector supports
equal,range,containsfilters. These filters can be specified as a JSON string. -
Filters support
NUMERICandSTRINGtypes.NUMERICtypes can beLong,Int,Short,DateorTimeStamp. Filters do not supportDoubleandFloatdata types.nullvalues are not indexed by Aerospike database. If an implicitly-constructed filter containsnullwhenaerospike.sindex.filteris not set, the query does not use the provided secondary index. -
In the case of an incompatible combination of
aerospike.sindexandaerospike.sindex.filter, the database will throw an error. -
equalfilter-
Only supports scalar types (collection data types not supported)
-
JSON Key Description namebin name typedatatype NUMERICorSTRINGvaluevalue of the bin -
Examples Equivalent SQL { "name": "bin1", "type": "NUMERIC", "value": 10}select * from namespace where col("bin1") == 10{ "name": "bin1", "type": "NUMERIC", "value": "2012-10-03"}select * from namespace where col("bin1") == java.sql.date.valueOf("2012-10-03"){ "name": "bin1", "type": "NUMERIC", "value": "2020-12-12 01:24:23"}select * from namespace where col("bin1") == java.sql.Timestamp.valueOf("2020-12-12 01:24:23"){ "name": "bin1", "type": "STRING", "value": "McDonalds"}select * from namespace where col("bin1") == "McDonalds"
-
-
rangefilter-
Only supports
NUMERICscalar types (collection data types not supported). -
| JSON Key | Description | | ------------- |:-------------: | |
name| bin name| |type| datatypeNUMERICorSTRING| |begin| start of the range | |end| end of the range | -
| Examples | Equivalent SQL | | ------- |:------: |
{ "name": "bin1", "type": "NUMERIC", "begin": 10, "end" : 20}|select * from namespace where col("bin1") >= 10 and col("bin1") <= 20|{ "name": "bin1", "type": "NUMERIC", "begin": "2012-10-03", "end" : "2013-10-03" }|select * from namespace where col("bin1") >= java.sql.date.valueOf("2012-10-03") and col("bin1") <= java.sql.date.valueOf("2013-10-03")|{ "name": "bin1", "type": "NUMERIC", "value": "2020-12-12 01:24:23", "end" : "2021-12-12 01:24:23"}|select * from namespace where col("bin1") >= java.sql.Timestamp.valueOf("2020-12-12 01:24:23") and col("bin1") <= java.sql.Timestamp.valueOf("2020-12-12 01:24:23")|
-
-
containsfilter-
Supports scalar and collection data type of
NUMERICandSTRINGtypes. -
JSON Key Description nameBin name typeDatatype NUMERICorSTRINGcolTypecolumn type or its equivalent numerical value (0,1,2,3…) valueValue of the bin -
Examples Index Type (Not So) Equivalent SQL { "name": "bin1", "type": "NUMERIC", "colType": "DEFAULT", "value" : 1}select * from namespace where col("bin1") ==1{ "name": "bin1", "type": "NUMERIC", "colType": 1, "value" : 1}Indexed list Find all records whose bin1 (of ArrayType) containing10as one of the values.{ "name": "bin1", "type": "NUMERIC", "colType": 2, "value" : 1}Indexed map keys Find all records whose bin1 (of MapType) containing10as map keys.{ "name": "bin1", "type": "NUMERIC", "colType": 3, "value" : 1}Indexed map values Find all records whose bin1 (of MapType) containing10as map values.
-