Jiping Zhou created PHOENIX-3370:
------------------------------------

             Summary: VIEW derived from another VIEW with WHERE on a TABLE 
doesn't use parent VIEW indexes
                 Key: PHOENIX-3370
                 URL: https://issues.apache.org/jira/browse/PHOENIX-3370
             Project: Phoenix
          Issue Type: Bug
    Affects Versions: 4.8.1
            Reporter: Jiping Zhou


1. Create a global table 
CREATE TABLE IF NOT EXISTS PLATFORM_ENTITY.GLOBAL_TABLE (
    ORGANIZATION_ID CHAR(15) NOT NULL, 
    KEY_PREFIX CHAR(3) NOT NULL,
    CREATED_DATE DATE,
    CREATED_BY CHAR(15),
    CONSTRAINT PK PRIMARY KEY (
        ORGANIZATION_ID, 
        KEY_PREFIX
    )
) VERSIONS=1, IMMUTABLE_ROWS=true, MULTI_TENANT=true;

2. Create a global view on base global table with where clause
CREATE VIEW IF NOT EXISTS PLATFORM_ENTITY.GLOBAL_VIEW  (
    INT1 BIGINT NOT NULL,
    DOUBLE1 DECIMAL(12, 3),
    IS_BOOLEAN BOOLEAN,
    TEXT1 VARCHAR,
    CONSTRAINT PKVIEW PRIMARY KEY
    (
        INT1
    )
)
AS SELECT * FROM PLATFORM_ENTITY.GLOBAL_TABLE WHERE KEY_PREFIX = '123';

3. Create gloabl index on the global view
CREATE INDEX IF NOT EXISTS GLOBAL_INDEX
ON PLATFORM_ENTITY.GLOBAL_VIEW (TEXT1 DESC, INT1)
INCLUDE (CREATED_BY, DOUBLE1, IS_BOOLEAN, CREATED_DATE);

4. Create tenant specific view on top of global view
CREATE VIEW IF NOT EXISTS PLATFORM_ENTITY.TENANT_VIEW  
AS SELECT * FROM PLATFORM_ENTITY.GLOBAL_VIEW;

5. Query in global view
EXPLAIN SELECT DOUBLE1 FROM PLATFORM_ENTITY.GLOBAL_VIEW WHERE ORGANIZATION_ID = 
'00Dxx0000002Col' AND TEXT1='Test' AND INT1=1;
The result is 
CLIENT 1-CHUNK 1 ROWS 452 BYTES PARALLEL 1-WAY ROUND ROBIN POINT LOOKUP ON 1 
KEY OVER PLATFORM_ENTITY.GLOBAL_TABLE
    SERVER FILTER BY TEXT1 = 'Test'

It is not using the secondary index at all. The same thing happens on the 
Tenant view.

However if we have a global view without where clause like
CREATE VIEW IF NOT EXISTS PLATFORM_ENTITY.GLOBAL_VIEW2  (
    INT1 BIGINT NOT NULL,
    DOUBLE1 DECIMAL(12, 3),
    IS_BOOLEAN BOOLEAN,
    TEXT1 VARCHAR,
    CONSTRAINT PKVIEW PRIMARY KEY
    (
        INT1
    )
)
AS SELECT * FROM PLATFORM_ENTITY.GLOBAL_TABLE;
CREATE INDEX IF NOT EXISTS GLOBAL_INDEX2
ON PLATFORM_ENTITY.GLOBAL_VIEW2 (TEXT1 DESC, INT1)
INCLUDE (CREATED_BY, DOUBLE1, IS_BOOLEAN, CREATED_DATE);

EXPLAIN SELECT DOUBLE1 FROM PLATFORM_ENTITY.GLOBAL_VIEW2 WHERE ORGANIZATION_ID 
= '00Dxx0000002Col' AND TEXT1='Test' AND INT1=1 ORDER BY TEXT1 DESC, INT1; 
The secondary index will be correctly used.



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

Reply via email to