You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Tyler Hobbs (JIRA)" <ji...@apache.org> on 2015/09/01 00:28:46 UTC

[jira] [Commented] (CASSANDRA-9664) Allow MV's select statements to be more complex

    [ https://issues.apache.org/jira/browse/CASSANDRA-9664?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14724150#comment-14724150 ] 

Tyler Hobbs commented on CASSANDRA-9664:
----------------------------------------

I've discovered one limitation of this: I don't think we will be able to support filtering on regular columns in the base table due to timestamp issues.

Suppose we have a base table like this:

{noformat}
CREATE TABLE base (a int, b int, c int, d int, PRIMARY KEY (a, b));
{noformat}

and a view:

{noformat}
CREATE MATERIALIZED VIEW view AS
    SELECT * FROM base
    WHERE a IS NOT NULL
    AND b IS NOT NULL
    AND c = 1
    PRIMARY KEY (a, b)
{noformat}

The view should only contain rows where {{c = 1}}.

Now, suppose we do the following:

{noformat}
INSERT INTO base (a, b, c, d) VALUES (0, 0, 1, 0) USING TIMESTAMP 0;
UPDATE base SET c = 1 USING TIMESTAMP 2;
UPDATE base SET c = 0 USING TIMESTAMP 3;  -- view row should be deleted w/ timestamp 3
UPDATE base SET c = 1 USING TIMESTAMP 4;
{noformat}

The third update results in a tombstone being written to the view row with a timestamp of 3 because {{c}} no longer matches our SELECT statement.  The problem comes at the final update: now that {{c}} matches the SELECT again, we should reinsert a row into the view.  For the reinsertion, we can use timestamp 4 for the row marker and {{c}}'s cell, but what about {{d}}'s cell?  If we use its timestamp from the base row (0), the view tombstone supercedes it, leaving {{d}} as null.  If we use timestamp 4 for {{d}}'s cell, we may accidentally ignore updates to {{d}}.  For example, this would update {{d}} in the base table but not the view:

{noformat}
UPDATE base SET d = 1 WHERE a = 0 AND b = 0 USING TIMESTAMP 1;
{noformat}

Note that the timestamp of 1 is higher than {{d}}'s timestamp in the base table (0) but lower than {{d}}'s timestamp in the view (4).

In light of this, I suggest that for the first iteration of this we only allow the SELECT statement to restrict PK columns.

> Allow MV's select statements to be more complex
> -----------------------------------------------
>
>                 Key: CASSANDRA-9664
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9664
>             Project: Cassandra
>          Issue Type: New Feature
>            Reporter: Carl Yeksigian
>             Fix For: 3.x
>
>
> [Materialized Views|https://issues.apache.org/jira/browse/CASSANDRA-6477] add support for a syntax which includes a {{SELECT}} statement, but only allows selection of direct columns, and does not allow any filtering to take place.
> We should add support to the MV {{SELECT}} statement to bring better parity with the normal CQL {{SELECT}} statement, specifically simple functions in the selected columns, as well as specifying a {{WHERE}} clause.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)