Predicate pushdown support

Predicate structure

Currently, VAST Database allows pushing down filter predicate p of the following logical structure:

  • An AND between multiple column predicates: p = p1 & p2 & p3

  • Within each column predicate pi, an OR between range predicates: ci = r1 | r2 | r3 | r4

  • Each range predicate rj is one of the following operators (where "x" is a column name, and c is a constant):

    • comparison operator:

      • t["x"] < c

      • t["x"] <= c

      • t["x"] == c

      • t["x"] > c

      • t["x"] >= c

      • t["x"] != c

    • is_in operator:

      • t["x"].isin([c1, c2, c3, c4, c5])

    • NULL checking:

      • t["x"].isnull()

      • ~t["x"].isnull()

    • Prefix match:

      • t["x"].startswith("prefix")

    • Substring match:

      • t["x"].contains("substr")

Column types

The following Arrow types support predicate pushdown:

  • int8

  • int16

  • int32

  • int64

  • float32

  • float64

  • utf8

  • bool

  • decimal128

  • binary

  • date32

  • time32

  • time64

  • timestamp