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

Xavier Fernandis commented on PHOENIX-5236:
-------------------------------------------

And as referenced as https://issues.apache.org/jira/browse/PHOENIX-4816

There is a workaround for this of using COLUMN_ENCODED_BYTES=NONE when creating 
the table.

*With the workaround* 
0: jdbc:phoenix:> DROP TABLE IF EXISTS test_workaround CASCADE;
> 
No rows affected (0.002 seconds)
0: jdbc:phoenix:> CREATE TABLE test_workaround (
. . . . . . . .)>     id VARCHAR PRIMARY KEY,
. . . . . . . .)>     name VARCHAR
. . . . . . . .)> ) COLUMN_ENCODED_BYTES=NONE;
No rows affected (0.636 seconds)
0: jdbc:phoenix:> UPSERT INTO test_workaround(id, name, city VARCHAR, 
department VARCHAR, age INTEGER)
. . . .semicolon> VALUES ('1', 'John Doe', 'Chennai', 'Engineering', 30);
. . . . . . . . > 
. . . . . . . . > UPSERT INTO test_workaround(id, name, city VARCHAR, 
department VARCHAR, age INTEGER)
. . . .semicolon> VALUES ('2', 'Jane Smith', 'Mumbai', 'Marketing', 28);
. . . . . . . . > 
. . . . . . . . > UPSERT INTO test_workaround(id, name, city VARCHAR, 
department VARCHAR, age INTEGER)
. . . .semicolon> VALUES ('3', 'Bob Wilson', 'Bangalore', 'Engineering', 35);
> 
1 row affected (0.005 seconds)
1 row affected (0.003 seconds)
1 row affected (0.003 seconds)
0: jdbc:phoenix:> SELECT id, name, city, department
. . . .semicolon> FROM test_workaround(city VARCHAR, department VARCHAR)
. . . .semicolon> WHERE city = 'Chennai' AND department = 'Engineering';
+----+----------+---------+-------------+
| ID |   NAME   |  CITY   | DEPARTMENT  |
+----+----------+---------+-------------+
| 1  | John Doe | Chennai | Engineering |
+----+----------+---------+-------------+
1 row selected (0.014 seconds)
0: jdbc:phoenix:> SELECT id, name, city, department, age
. . . .semicolon> FROM test_workaround(city VARCHAR, department VARCHAR, age 
INTEGER)
. . . .semicolon> WHERE city = 'Chennai' AND department = 'Engineering' AND age 
> 25;
> 
+----+----------+---------+-------------+-----+
| ID |   NAME   |  CITY   | DEPARTMENT  | AGE |
+----+----------+---------+-------------+-----+
| 1  | John Doe | Chennai | Engineering | 30  |
+----+----------+---------+-------------+-----+

*Without the workaround*
1 row selected (0.012 seconds)
0: jdbc:phoenix:> DROP TABLE IF EXISTS test_no_workaround CASCADE;
> 
No rows affected (0.948 seconds)
0: jdbc:phoenix:> CREATE TABLE test_no_workaround (
. . . . . . . .)>     id VARCHAR PRIMARY KEY,
. . . . . . . .)>     name VARCHAR
. . . . . . . .)> );
No rows affected (0.63 seconds)
0: jdbc:phoenix:> UPSERT INTO test_no_workaround(id, name, city VARCHAR, 
department VARCHAR, age INTEGER)
. . . .semicolon> VALUES ('1', 'John Doe', 'Chennai', 'Engineering', 30);
. . . . . . . . > 
. . . . . . . . > UPSERT INTO test_no_workaround(id, name, city VARCHAR, 
department VARCHAR, age INTEGER)
. . . .semicolon> VALUES ('2', 'Jane Smith', 'Mumbai', 'Marketing', 28);
. . . . . . . . > 
. . . . . . . . > UPSERT INTO test_no_workaround(id, name, city VARCHAR, 
department VARCHAR, age INTEGER)
. . . .semicolon> VALUES ('3', 'Bob Wilson', 'Bangalore', 'Engineering', 35);
> 
1 row affected (0.006 seconds)
1 row affected (0.004 seconds)
1 row affected (0.003 seconds)
0: jdbc:phoenix:> SELECT id, name, city, department
. . . .semicolon> FROM test_no_workaround(city VARCHAR, department VARCHAR)
. . . .semicolon> WHERE city = 'Chennai' AND department = 'Engineering';
org.apache.phoenix.schema.PTable$QualifierEncodingScheme$InvalidQualifierBytesException:
 Invalid number of qualifier bytes. Expected length: 4. Actual: 4
        at 
org.apache.phoenix.schema.PTable$QualifierEncodingScheme.getReservedQualifier(PTable.java:549)
        at 
org.apache.phoenix.schema.PTable$QualifierEncodingScheme.access$400(PTable.java:318)
        at 
org.apache.phoenix.schema.PTable$QualifierEncodingScheme$3.decode(PTable.java:398)
        at 
org.apache.phoenix.filter.MultiEncodedCQKeyValueComparisonFilter$1.visit(MultiEncodedCQKeyValueComparisonFilter.java:182)
        at 
org.apache.phoenix.filter.MultiEncodedCQKeyValueComparisonFilter$1.visit(MultiEncodedCQKeyValueComparisonFilter.java:179)
        at 
org.apache.phoenix.expression.KeyValueColumnExpression.accept(KeyValueColumnExpression.java:143)
        at 
org.apache.phoenix.expression.BaseExpression.acceptChildren(BaseExpression.java:244)
        at 
org.apache.phoenix.expression.ComparisonExpression.accept(ComparisonExpression.java:370)
        at 
org.apache.phoenix.expression.BaseExpression.acceptChildren(BaseExpression.java:244)
        at 
org.apache.phoenix.expression.AndExpression.accept(AndExpression.java:99)
        at 
org.apache.phoenix.filter.MultiEncodedCQKeyValueComparisonFilter.initFilter(MultiEncodedCQKeyValueComparisonFilter.java:196)
        at 
org.apache.phoenix.filter.MultiEncodedCQKeyValueComparisonFilter.<init>(MultiEncodedCQKeyValueComparisonFilter.java:103)
        at 
org.apache.phoenix.compile.WhereCompiler.setScanFilter(WhereCompiler.java:354)
        at 
org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:173)
        at 
org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:118)
        at 
org.apache.phoenix.compile.QueryCompiler.compileSingleFlatQuery(QueryCompiler.java:739)
        at 
org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:667)
        at 
org.apache.phoenix.compile.QueryCompiler.compileSelect(QueryCompiler.java:249)
        at 
org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:178)
        at 
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:547)
        at 
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:510)
        at 
org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:314)
        at 
org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:303)
        at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
        at 
org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:302)
        at 
org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:295)
        at 
org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:2061)
        at sqlline.Commands.executeSingleQuery(Commands.java:1054)
        at sqlline.Commands.execute(Commands.java:1003)
        at sqlline.Commands.sql(Commands.java:967)
        at sqlline.SqlLine.dispatch(SqlLine.java:734)
        at sqlline.SqlLine.begin(SqlLine.java:541)
        at sqlline.SqlLine.start(SqlLine.java:267)
        at sqlline.SqlLine.main(SqlLine.java:206)
0: jdbc:phoenix:> 

> Multiple dynamic columns in WHERE clause is not working
> -------------------------------------------------------
>
>                 Key: PHOENIX-5236
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5236
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.14.0
>            Reporter: Chandrasekar
>            Priority: Major
>
> When the query uses multiple dynamic columns in the WHERE clause it's 
> failing. Consider the following example:
>  
> CREATE TABLE CITY (ID INTEGER, NAME VARCHAR CONSTRAINT PK PRIMARY KEY (ID))
> And the following upserts:
> UPSERT INTO CITY (ID, NAME, POPULATION INTEGER, DISTRICT VARCHAR) VALUES (1, 
> 'XYZ', 1000, 'XYZ')
> UPSERT INTO CITY (ID, NAME, POPULATION INTEGER) VALUES (2, 'ABC', 2000)
>  
> And now when the following query is executed:
> SELECT ID, NAME FROM CITY (POPULATION INTEGER, DISTRICT VARCHAR) WHERE  
> DISTRICT IS NULL AND POPULATION > 1000
> It throws the following exception:
> org.apache.phoenix.schema.PTable$QualifierEncodingScheme$InvalidQualifierBytesException:
>  Invalid number of qualifier bytes. Expected length: 2. Actual: 8
>  Even comparing different dynamic columns is not working. For example in the 
> same table, following upsert is executed:
> UPSERT INTO CITY (ID, NAME, CURRENT_POPULATION INTEGER) VALUES (2, 'ABC', 
> 2000)
> And when the following query is executed:
> SELECT ID, NAME FROM CITY (POPULATION INTEGER, CURRENT_POPULATION INTEGER) 
> WHERE POPULATION != CURRENT_POPULATION
> It again throws the same error (
> org.apache.phoenix.schema.PTable$QualifierEncodingScheme$InvalidQualifierBytesException:
>  Invalid number of qualifier bytes. Expected length: 2. Actual: 10)
> Does phoenix allows querying by conditions on multiple dynamic columns? The 
> phoenix version used is 4.14.0 and HBase version is 1.4.8.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to