[ https://issues.apache.org/jira/browse/PHOENIX-3744?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16023267#comment-16023267 ]
ASF GitHub Bot commented on PHOENIX-3744: ----------------------------------------- Github user JamesRTaylor commented on a diff in the pull request: https://github.com/apache/phoenix/pull/239#discussion_r118312938 --- Diff: phoenix-core/src/main/java/org/apache/phoenix/iterate/DefaultParallelScanGrouper.java --- @@ -17,46 +17,79 @@ */ package org.apache.phoenix.iterate; +import java.sql.SQLException; import java.util.List; +import com.google.common.base.Preconditions; +import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.client.Scan; import org.apache.phoenix.compile.QueryPlan; +import org.apache.phoenix.compile.StatementContext; import org.apache.phoenix.schema.PTable; import org.apache.phoenix.schema.PTable.IndexType; import org.apache.phoenix.schema.SaltingUtil; +import org.apache.phoenix.schema.TableRef; import org.apache.phoenix.util.ScanUtil; /** * Default implementation that creates a scan group if a plan is row key ordered (which requires a merge sort), - * or if a scan crosses a region boundary and the table is salted or a local index. + * or if a scan crosses a region boundary and the table is salted or a local index. */ public class DefaultParallelScanGrouper implements ParallelScanGrouper { - - private static final DefaultParallelScanGrouper INSTANCE = new DefaultParallelScanGrouper(); - public static DefaultParallelScanGrouper getInstance() { - return INSTANCE; - } - - private DefaultParallelScanGrouper() {} - - @Override - public boolean shouldStartNewScan(QueryPlan plan, List<Scan> scans, byte[] startKey, boolean crossedRegionBoundary) { - PTable table = plan.getTableRef().getTable(); - boolean startNewScanGroup = false; - if (!plan.isRowKeyOrdered()) { - startNewScanGroup = true; - } else if (crossedRegionBoundary) { - if (table.getIndexType() == IndexType.LOCAL) { - startNewScanGroup = true; - } else if (table.getBucketNum() != null) { - startNewScanGroup = scans.isEmpty() || - ScanUtil.crossesPrefixBoundary(startKey, - ScanUtil.getPrefix(scans.get(scans.size()-1).getStartRow(), SaltingUtil.NUM_SALTING_BYTES), - SaltingUtil.NUM_SALTING_BYTES); - } - } - return startNewScanGroup; + private static DefaultParallelScanGrouper INSTANCE = new DefaultParallelScanGrouper(); --- End diff -- I don't think that DefaultParallelScanGrouper can be a singleton with the state of context and tableName inside of it. > Support snapshot scanners for MR-based queries > ---------------------------------------------- > > Key: PHOENIX-3744 > URL: https://issues.apache.org/jira/browse/PHOENIX-3744 > Project: Phoenix > Issue Type: Bug > Reporter: James Taylor > Assignee: Akshita Malhotra > Attachments: PHOENIX-3744.patch > > > HBase support scanning over snapshots, with a SnapshotScanner that accesses > the region directly in HDFS. We should make sure that Phoenix can support > that. > Not sure how we'd want to decide when to run a query over a snapshot. Some > ideas: > - if there's an SCN set (i.e. the query is running at a point in time in the > past) > - if the memstore is empty > - if the query is being run at a timestamp earlier than any memstore data > - as a config option on the table > - as a query hint > - based on some kind of optimizer rule (i.e. based on estimated # of bytes > that will be scanned) > Phoenix typically runs a query at the timestamp at which it was compiled. Any > data committed after this time should not be seen while a query is running. -- This message was sent by Atlassian JIRA (v6.3.15#6346)