You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Hudson (JIRA)" <ji...@apache.org> on 2014/10/04 02:37:35 UTC

[jira] [Commented] (PHOENIX-1251) Salted queries with range scan become full table scans

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

Hudson commented on PHOENIX-1251:
---------------------------------

SUCCESS: Integrated in Phoenix | 4.0 | Hadoop2 #193 (See [https://builds.apache.org/job/Phoenix-4.0-hadoop2/193/])
PHOENIX-1251 Salted queries with range scan become full table scans (jtaylor: rev a5d07cc076763000f0c48c4c958e33aa578e85a9)
* phoenix-core/src/main/java/org/apache/phoenix/compile/StatementContext.java
* phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java
* phoenix-core/src/main/java/org/apache/phoenix/compile/ScanRanges.java
* phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexBuilder.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/InListIT.java
* phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java
* phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java
PHOENIX-1251 Salted queries with range scan become full table scans (jtaylor: rev 51f69bcb6f09fa3fd7e4194fc192bfd0bde6c60d)
* phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java
* phoenix-core/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/DefaultParallelIteratorsRegionSplitterIT.java
* phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIteratorRegionSplitterFactory.java
* phoenix-core/src/main/java/org/apache/phoenix/query/KeyRange.java
* phoenix-core/src/main/java/org/apache/phoenix/query/StatsManagerImpl.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryPlanIT.java
* phoenix-core/src/main/java/org/apache/phoenix/iterate/SkipRangeParallelIteratorRegionSplitter.java
* phoenix-pig/src/main/java/org/apache/phoenix/pig/hadoop/PhoenixInputFormat.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificTablesDMLIT.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/MultiCfQueryExecIT.java
* phoenix-core/src/main/java/org/apache/phoenix/iterate/LocalIndexParallelIteratorRegionSplitter.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipRangeParallelIteratorRegionSplitterIT.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java
* phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/ParallelIteratorsIT.java
* phoenix-core/src/main/java/org/apache/phoenix/query/StatsManager.java
* phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/DeleteIT.java
* phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java
* phoenix-core/src/main/java/org/apache/phoenix/schema/stat/StatisticsCollector.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/InListIT.java
* phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java
* phoenix-core/src/test/java/org/apache/phoenix/compile/ScanRangesIntersectTest.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/KeyOnlyIT.java
* phoenix-core/src/test/java/org/apache/phoenix/query/BaseConnectionlessQueryTest.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseParallelIteratorsRegionSplitterIT.java
* phoenix-core/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/StatsManagerIT.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseViewIT.java
* phoenix-core/src/main/java/org/apache/phoenix/compile/QueryPlan.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseTenantSpecificViewIndexIT.java
* phoenix-core/src/main/java/org/apache/phoenix/compile/StatementContext.java
* phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java
* phoenix-core/src/main/java/org/apache/phoenix/iterate/DefaultParallelIteratorRegionSplitter.java
* phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
* phoenix-core/src/test/java/org/apache/phoenix/query/QueryPlanTest.java
* phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
* phoenix-core/src/test/java/org/apache/phoenix/compile/WhereCompilerTest.java
* phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
* phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java
* phoenix-core/src/test/java/org/apache/phoenix/compile/WhereOptimizerTest.java
* phoenix-core/src/main/java/org/apache/phoenix/schema/stat/StatisticsTable.java
* phoenix-core/src/test/java/org/apache/phoenix/compile/ScanRangesTest.java
* phoenix-core/src/main/java/org/apache/phoenix/filter/SkipScanFilter.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/index/SaltedIndexIT.java
* phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java
* phoenix-core/src/main/java/org/apache/phoenix/compile/ScanRanges.java
* phoenix-core/src/it/java/org/apache/phoenix/end2end/GuidePostsLifeCycleIT.java


> Salted queries with range scan become full table scans
> ------------------------------------------------------
>
>                 Key: PHOENIX-1251
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1251
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Kyle Buzsaki
>         Attachments: PHOENIX-1251.patch, PHOENIX-1251_v2.patch, PHOENIX-1251_v3.patch, PHOENIX-1251_v4.patch, PHOENIX-1251_v5.patch, PHOENIX-1251_v6.patch, PHOENIX-1251_v7.patch, PHOENIX-1251_v8a.patch, PHOENIX-1251_v8b.patch, PHOENIX-1251_v9.patch
>
>
> See InListIT#testLeadingPKWithTrailingRVCSlotHole as an example query that will fail when given the /*+ RANGE_SCAN */ hint.
> The issue is caused by the WhereOptimizer extracting the leading partially qualified row keys of the where clause but improperly producing splitScan start and stop rows in parallel iterators. 
> For example, with a where clause like:
> {code}
> SELECT * FROM TABLE_SALTED_4 WHERE pk1 = 2 and pk3 = 4;
> {code}
> The ScanRanges will set the scan boundaries as:
> {code}
> [\x00\x80\x00\x00\x02 - \x03\x80\x00\x00\x03]
> {code}
> This is technically correct as the scan start/stop rows need to include the salt byte, but it means that naively intersecting the scan ranges with region boundaries such as:
> {code}
> [* - \x01]
> [\x01 - \x02]
> [\x02 - \x03]
> [\x03 - *]
> {code}
> Will produce the following partially incorrect splitScan boundaries:
> {code}
> [\x00\x80\x00\x00\x02  - \x01]
> [\x01 - \x02]
> [\x02 - \x03]
> [\x03 - \x03\x80\x00\x00\x03]
> {code}
> Note that this is only a problem when the /*+ RANGE_SCAN */ hint is given. Without a hint, this query will use a skip scan, sidestepping the issue.
> This is also related to PHOENIX-1163 and depending on how PHOENIX-1163 is resolved, could be fixed at the same time.



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