Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
4.12.0
-
None
-
HBase 1.3.1
Description
With phoenix.use.stats.parallelization set to false, aggregate query returns incorrect results when stats are available.
With local index and stats disabled for parallelization:
explain select count(*) from TABLE_T; +-------------------------------------------------------------------------------------------------------+-----------------+----------------+-----------+ | PLAN | EST_BYTES_READ | EST_ROWS_READ | EST_INFO | +-------------------------------------------------------------------------------------------------------+-----------------+----------------+-----------+ | CLIENT 0-CHUNK 332170 ROWS 625043899 BYTES PARALLEL 0-WAY RANGE SCAN OVER TABLE_T [1] | 625043899 | 332170 | 150792825 | | SERVER FILTER BY FIRST KEY ONLY | 625043899 | 332170 | 150792825 | | SERVER AGGREGATE INTO SINGLE ROW | 625043899 | 332170 | 150792825 | +-------------------------------------------------------------------------------------------------------+-----------------+----------------+-----------+ select count(*) from TABLE_T; +-----------+ | COUNT(1) | +-----------+ | 0 | +-----------+
Using data table
explain select /*+NO_INDEX*/ count(*) from TABLE_T; +--------------------------------------------------------------------------------------------------+-----------------+----------------+----------------+ | PLAN | EST_BYTES_READ | EST_ROWS_READ | EST_INFO_TS | +--------------------------------------------------------------------------------------------------+-----------------+----------------+----------------+ | CLIENT 2-CHUNK 332151 ROWS 438492470 BYTES PARALLEL 1-WAY FULL SCAN OVER TABLE_T | 438492470 | 332151 | 1507928257617 | | SERVER FILTER BY FIRST KEY ONLY | 438492470 | 332151 | 1507928257617 | | SERVER AGGREGATE INTO SINGLE ROW | 438492470 | 332151 | 1507928257617 | +--------------------------------------------------------------------------------------------------+-----------------+----------------+----------------+ select /*+NO_INDEX*/ count(*) from TABLE_T; +-----------+ | COUNT(1) | +-----------+ | 14 | +-----------+
Without stats available, results are correct:
explain select /*+NO_INDEX*/ count(*) from TABLE_T; +----------------------------------------------------------------------+-----------------+----------------+--------------+ | PLAN | EST_BYTES_READ | EST_ROWS_READ | EST_INFO_TS | +----------------------------------------------------------------------+-----------------+----------------+--------------+ | CLIENT 2-CHUNK PARALLEL 1-WAY FULL SCAN OVER TABLE_T | null | null | null | | SERVER FILTER BY FIRST KEY ONLY | null | null | null | | SERVER AGGREGATE INTO SINGLE ROW | null | null | null | +----------------------------------------------------------------------+-----------------+----------------+--------------+ select /*+NO_INDEX*/ count(*) from TABLE_T; +-----------+ | COUNT(1) | +-----------+ | 333327 | +-----------+