Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-10217

Support custom query expressions in SELECT

    XMLWordPrintableJSON

    Details

    • Type: New Feature
    • Status: Resolved
    • Priority: Normal
    • Resolution: Fixed
    • Fix Version/s: 3.0.0 rc1
    • Component/s: Legacy/CQL
    • Labels:
      None

      Description

      (Broken out of CASSANDRA-10124)

      Custom index implementations often support query expressions which do not fit the structure of CQL. To support these, it has been necessary to add a fake column to the base table and query that using the custom syntax. Taking an example from the Stratio docs:

      SELECT * FROM tweets WHERE lucene='{
          filter : {type:"range", field:"time", lower:"2014/04/25", upper:"2014/05/1"},
          query  : {type:"phrase", field:"body", value:"big data gives organizations", slop:1}
      }' 
      

      The lucene field is a dummy column that has to be added to the table in order to associate the pre-3.0 row-based index with the tweets table. We could rewrite this query as:

      SELECT * FROM tweets 
      WHERE expr(lucene, '{filter : {type:"range", field:"time", lower:"2014/04/25", upper:"2014/05/1"},
                   query  : {type:"phrase", field:"body", value:"big data gives organizations", slop:1}}');
      

      In this version the expr function takes 2 arguments: the first is the name of the index being targetted, lucene and the second is the query string itself.

      Parsing and validation of those expressions would be delegated to the custom index implementations which support them.

      One thing to consider is index selection. If a query contains custom expressions, but the target index is not selected, C* has no way to use the custom expressions as a post-query filter, like it does with standard expressions & ALLOW FILTERING. To compensate for that, index selection should be weighted in favour of indexes targetted by custom expressions. At least in the first instance, we should also restrict queries to targetting a single index via custom expressions, i.e. disallow queries like SELECT * FROM t WHERE expr(index1, 'foo') AND expr(index2, 'bar')

        Attachments

          Activity

            People

            • Assignee:
              samt Sam Tunnicliffe
              Reporter:
              samt Sam Tunnicliffe
              Authors:
              Sam Tunnicliffe
              Reviewers:
              Sylvain Lebresne
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: