[
https://issues.apache.org/jira/browse/DRILL-4020?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Akihiko Kusanagi updated DRILL-4020:
------------------------------------
Description:
Create a test HBase table:
{noformat}
hbase> create 'table', 'f'
hbase> put 'table', 'row1', 'f:c', 'value1'
hbase> put 'table', 'row2', 'f:c', 'value2'
hbase> put 'table', 'row3', 'f:c', 'value3'
{noformat}
The table looks like this:
{noformat}
0: jdbc:drill:zk=maprdemo:5181> SELECT CONVERT_FROM(row_key, 'UTF8') FROM
hbase.`table`;
+---------+
| EXPR$0 |
+---------+
| row1 |
| row2 |
| row3 |
+---------+
1 row selected (4.596 seconds)
{noformat}
However, this query returns incorrect results when a not-equal operator is used
on the row key:
{noformat}
0: jdbc:drill:zk=maprdemo:5181> SELECT CONVERT_FROM(row_key, 'UTF8') FROM
hbase.`table` WHERE row_key <> 'row1';
+---------+
| EXPR$0 |
+---------+
| row1 |
| row2 |
| row3 |
+---------+
1 row selected (0.573 seconds)
{noformat}
In the query plan, there is no RowFilter:
{noformat}
00-00 Screen
00-01 Project(EXPR$0=[CONVERT_FROMUTF8($0)])
00-02 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec
[tableName=table, startRow=, stopRow=, filter=null], columns=[`row_key`]]])
{noformat}
When the query has multiple not-equal operators, it works fine:
{noformat}
0: jdbc:drill:zk=maprdemo:5181> SELECT CONVERT_FROM(row_key, 'UTF8') FROM
hbase.`table` WHERE row_key <> 'row1' AND row_key <> 'row2';
+---------+
| EXPR$0 |
+---------+
| row3 |
+---------+
1 row selected (0.255 seconds)
{noformat}
In the query plan, a FilterList has two RowFilters with NOT_EQUAL operators:
{noformat}
00-00 Screen
00-01 Project(EXPR$0=[CONVERT_FROMUTF8($0)])
00-02 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec
[tableName=table, startRow=, stopRow=, filter=FilterList AND (2/2): [RowFilter
(NOT_EQUAL, row1), RowFilter (NOT_EQUAL, row2)]], columns=[`row_key`]]])
{noformat}
was:
Create a test HBase table:
hbase> create 'table', 'f'
hbase> put 'table', 'row1', 'f:c', 'value1'
hbase> put 'table', 'row2', 'f:c', 'value2'
hbase> put 'table', 'row3', 'f:c', 'value3'
The table looks like this:
0: jdbc:drill:zk=maprdemo:5181> SELECT CONVERT_FROM(row_key, 'UTF8') FROM
hbase.`table`;
+---------+
| EXPR$0 |
+---------+
| row1 |
| row2 |
| row3 |
+---------+
1 row selected (4.596 seconds)
However, this query returns incorrect results when a not-equal operator is used
on the row key:
0: jdbc:drill:zk=maprdemo:5181> SELECT CONVERT_FROM(row_key, 'UTF8') FROM
hbase.`table` WHERE row_key <> 'row1';
+---------+
| EXPR$0 |
+---------+
| row1 |
| row2 |
| row3 |
+---------+
1 row selected (0.573 seconds)
In the query plan, there is no RowFilter:
00-00 Screen
00-01 Project(EXPR$0=[CONVERT_FROMUTF8($0)])
00-02 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec
[tableName=table, startRow=, stopRow=, filter=null], columns=[`row_key`]]])
When the query has multiple not-equal operators, it works fine:
0: jdbc:drill:zk=maprdemo:5181> SELECT CONVERT_FROM(row_key, 'UTF8') FROM
hbase.`table` WHERE row_key <> 'row1' AND row_key <> 'row2';
+---------+
| EXPR$0 |
+---------+
| row3 |
+---------+
1 row selected (0.255 seconds)
In the query plan, a FilterList has two RowFilters with NOT_EQUAL operators:
00-00 Screen
00-01 Project(EXPR$0=[CONVERT_FROMUTF8($0)])
00-02 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec
[tableName=table, startRow=, stopRow=, filter=FilterList AND (2/2): [RowFilter
(NOT_EQUAL, row1), RowFilter (NOT_EQUAL, row2)]], columns=[`row_key`]]])
> The not-equal operator returns incorrect results when used on the HBase row
> key
> -------------------------------------------------------------------------------
>
> Key: DRILL-4020
> URL: https://issues.apache.org/jira/browse/DRILL-4020
> Project: Apache Drill
> Issue Type: Bug
> Components: Storage - HBase
> Affects Versions: 1.2.0
> Environment: Drill Sandbox
> Reporter: Akihiko Kusanagi
> Priority: Critical
>
> Create a test HBase table:
> {noformat}
> hbase> create 'table', 'f'
> hbase> put 'table', 'row1', 'f:c', 'value1'
> hbase> put 'table', 'row2', 'f:c', 'value2'
> hbase> put 'table', 'row3', 'f:c', 'value3'
> {noformat}
> The table looks like this:
> {noformat}
> 0: jdbc:drill:zk=maprdemo:5181> SELECT CONVERT_FROM(row_key, 'UTF8') FROM
> hbase.`table`;
> +---------+
> | EXPR$0 |
> +---------+
> | row1 |
> | row2 |
> | row3 |
> +---------+
> 1 row selected (4.596 seconds)
> {noformat}
> However, this query returns incorrect results when a not-equal operator is
> used on the row key:
> {noformat}
> 0: jdbc:drill:zk=maprdemo:5181> SELECT CONVERT_FROM(row_key, 'UTF8') FROM
> hbase.`table` WHERE row_key <> 'row1';
> +---------+
> | EXPR$0 |
> +---------+
> | row1 |
> | row2 |
> | row3 |
> +---------+
> 1 row selected (0.573 seconds)
> {noformat}
> In the query plan, there is no RowFilter:
> {noformat}
> 00-00 Screen
> 00-01 Project(EXPR$0=[CONVERT_FROMUTF8($0)])
> 00-02 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec
> [tableName=table, startRow=, stopRow=, filter=null], columns=[`row_key`]]])
> {noformat}
> When the query has multiple not-equal operators, it works fine:
> {noformat}
> 0: jdbc:drill:zk=maprdemo:5181> SELECT CONVERT_FROM(row_key, 'UTF8') FROM
> hbase.`table` WHERE row_key <> 'row1' AND row_key <> 'row2';
> +---------+
> | EXPR$0 |
> +---------+
> | row3 |
> +---------+
> 1 row selected (0.255 seconds)
> {noformat}
> In the query plan, a FilterList has two RowFilters with NOT_EQUAL operators:
> {noformat}
> 00-00 Screen
> 00-01 Project(EXPR$0=[CONVERT_FROMUTF8($0)])
> 00-02 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec
> [tableName=table, startRow=, stopRow=, filter=FilterList AND (2/2):
> [RowFilter (NOT_EQUAL, row1), RowFilter (NOT_EQUAL, row2)]],
> columns=[`row_key`]]])
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)