Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-1469

Binary columns do not work correctly for indexing

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 4.1.0
    • 4.3.0, 3.3.0, 4.2.3, 3.2.3
    • None
    • None

    Description

      I recently added a secondary index to the readonlydb.read_only_auth_session table and some queries started to fail at runtime with the error below. My index (as checked in) has the parent_session_id column in an INCLUDE clause, but I found that even if I rebuild the index without that column I still get the error.

      java.lang.Throwable: ( username: admin@701048957670893.com )
      java.lang.IllegalArgumentException: Unsupported non nullable index type BINARY
      at org.apache.phoenix.util.IndexUtil.getIndexColumnDataType(IndexUtil.java:104)
      at org.apache.phoenix.util.IndexUtil.getIndexColumnDataType(IndexUtil.java:80)
      at org.apache.phoenix.compile.IndexStatementRewriter.visit(IndexStatementRewriter.java:99)
      at org.apache.phoenix.compile.IndexStatementRewriter.visit(IndexStatementRewriter.java:41)
      at org.apache.phoenix.parse.ColumnParseNode.accept(ColumnParseNode.java:50)
      at org.apache.phoenix.parse.ParseNodeRewriter.rewrite(ParseNodeRewriter.java:96)
      at org.apache.phoenix.compile.IndexStatementRewriter.translate(IndexStatementRewriter.java:74)
      at org.apache.phoenix.compile.IndexStatementRewriter.translate(IndexStatementRewriter.java:61)
      at org.apache.phoenix.optimize.QueryOptimizer.getApplicablePlans(QueryOptimizer.java:127)
      at org.apache.phoenix.optimize.QueryOptimizer.optimize(QueryOptimizer.java:81)
      at org.apache.phoenix.optimize.QueryOptimizer.optimize(QueryOptimizer.java:67)
      at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:222)
      at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:217)
      at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
      at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:216)
      at org.apache.phoenix.jdbc.PhoenixPreparedStatement.executeQuery(PhoenixPreparedStatement.java:183)
      at phoenix.connection.ProtectedPhoenixPreparedStatement.executeQuery(ProtectedPhoenixPreparedStatement.java:61)
      ...

      Table definition:
      CREATE TABLE IF NOT EXISTS TEST.AUTH_SESSION(
      RAW_SESSION_ID BINARY(64) NOT NULL,
      USERS_ID VARCHAR,
      CREATED_DATE TIME,
      LAST_MODIFIED_DATE TIME,
      NUM_SECONDS_VALID INTEGER,
      USER_TYPE VARCHAR,
      PARENT_SESSION_ID BINARY(64),
      SESSION_TYPE VARCHAR,
      PARENT_SESSION_ID_HEX VARCHAR
      CONSTRAINT PK PRIMARY KEY (
      RAW_SESSION_ID
      )
      )

      Index definition:

      CREATE INDEX IF NOT EXISTS IE4AUTH_SESSION_PARENT
      ON TEST.AUTH_SESSION (PARENT_SESSION_ID_HEX)
      INCLUDE (SESSION_TYPE)

      SQL:
      select RAW_SESSION_ID,
      CREATED_DATE,
      LAST_MODIFIED_DATE,
      NUM_SECONDS_VALID,
      PARENT_SESSION_ID,
      SESSION_TYPE,
      PARENT_SESSION_ID_HEX
      from TEST.AUTH_SESSION
      where USERS_ID = ?
      and RAW_SESSION_ID != ?

      Attachments

        1. 33.patch
          18 kB
          James R. Taylor

        Activity

          People

            dhacker1341 Dave Hacker
            jcollins@salesforce.com Jesse Collins
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: