PHOENIX-1391 Remove obsolete hint
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/668d6ee4 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/668d6ee4 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/668d6ee4 Branch: refs/heads/4.2 Commit: 668d6ee48ccd4c616966a173ad00393694ff1b50 Parents: 346891b Author: James Taylor <[email protected]> Authored: Tue Oct 28 14:08:08 2014 -0700 Committer: James Taylor <[email protected]> Committed: Tue Oct 28 14:08:08 2014 -0700 ---------------------------------------------------------------------- .../end2end/SkipScanAfterManualSplitIT.java | 2 +- .../org/apache/phoenix/execute/BaseQueryPlan.java | 6 ++++++ .../org/apache/phoenix/iterate/ExplainTable.java | 17 +++++++++++++++-- .../apache/phoenix/iterate/ParallelIterators.java | 2 +- .../phoenix/jdbc/PhoenixDatabaseMetaData.java | 15 +++++++-------- .../java/org/apache/phoenix/parse/HintNode.java | 9 ++++----- .../phoenix/query/BaseConnectionlessQueryTest.java | 2 ++ .../org/apache/phoenix/query/QueryPlanTest.java | 8 ++++++++ 8 files changed, 44 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/668d6ee4/phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java index 22b33f8..0478816 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java @@ -128,7 +128,7 @@ public class SkipScanAfterManualSplitIT extends BaseHBaseManagedTimeIT { assertEquals(nRegions, nInitialRegions); int nRows = 2; - String query = "SELECT /*+ NO_INTRA_REGION_PARALLELIZATION */ count(*) FROM S WHERE a IN ('tl','jt',' a',' b',' c',' d')"; + String query = "SELECT count(*) FROM S WHERE a IN ('tl','jt',' a',' b',' c',' d')"; ResultSet rs1 = conn.createStatement().executeQuery(query); assertTrue(rs1.next()); nRegions = services.getAllTableRegions(TABLE_NAME_BYTES).size(); http://git-wip-us.apache.org/repos/asf/phoenix/blob/668d6ee4/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java index 03c643d..d91ad51 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java @@ -48,6 +48,7 @@ import org.apache.phoenix.iterate.ParallelIterators.ParallelIteratorFactory; import org.apache.phoenix.iterate.ResultIterator; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.parse.FilterableStatement; +import org.apache.phoenix.parse.HintNode.Hint; import org.apache.phoenix.parse.ParseNodeFactory; import org.apache.phoenix.parse.TableName; import org.apache.phoenix.schema.KeyValueSchema; @@ -165,6 +166,11 @@ public abstract class BaseQueryPlan implements QueryPlan { if (OrderBy.REV_ROW_KEY_ORDER_BY.equals(orderBy)) { ScanUtil.setReversed(scan); } + + if (statement.getHint().hasHint(Hint.SMALL)) { + scan.setSmall(true); + } + // Set producer on scan so HBase server does round robin processing //setProducer(scan); // Set the time range on the scan so we don't get back rows newer than when the statement was compiled http://git-wip-us.apache.org/repos/asf/phoenix/blob/668d6ee4/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java index 40a0cff..8c04383 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java @@ -31,9 +31,12 @@ import org.apache.hadoop.hbase.filter.PageFilter; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.util.Bytes; import org.apache.phoenix.compile.GroupByCompiler.GroupBy; +import org.apache.phoenix.compile.OrderByCompiler.OrderBy; import org.apache.phoenix.compile.ScanRanges; import org.apache.phoenix.compile.StatementContext; import org.apache.phoenix.coprocessor.BaseScannerRegionObserver; +import org.apache.phoenix.parse.HintNode; +import org.apache.phoenix.parse.HintNode.Hint; import org.apache.phoenix.query.KeyRange; import org.apache.phoenix.query.KeyRange.Bound; import org.apache.phoenix.schema.PDataType; @@ -50,15 +53,19 @@ public abstract class ExplainTable { protected final StatementContext context; protected final TableRef tableRef; protected final GroupBy groupBy; + protected final OrderBy orderBy; + protected final HintNode hint; public ExplainTable(StatementContext context, TableRef table) { - this(context,table,GroupBy.EMPTY_GROUP_BY); + this(context,table,GroupBy.EMPTY_GROUP_BY, OrderBy.EMPTY_ORDER_BY, HintNode.EMPTY_HINT_NODE); } - public ExplainTable(StatementContext context, TableRef table, GroupBy groupBy) { + public ExplainTable(StatementContext context, TableRef table, GroupBy groupBy, OrderBy orderBy, HintNode hintNode) { this.context = context; this.tableRef = table; this.groupBy = groupBy; + this.orderBy = orderBy; + this.hint = hintNode; } private boolean explainSkipScan(StringBuilder buf) { @@ -90,6 +97,12 @@ public abstract class ExplainTable { StringBuilder buf = new StringBuilder(prefix); ScanRanges scanRanges = context.getScanRanges(); boolean hasSkipScanFilter = false; + if (hint.hasHint(Hint.SMALL)) { + buf.append("SMALL "); + } + if (OrderBy.REV_ROW_KEY_ORDER_BY.equals(orderBy)) { + buf.append("REVERSE "); + } if (scanRanges.isEverything()) { buf.append("FULL SCAN "); } else { http://git-wip-us.apache.org/repos/asf/phoenix/blob/668d6ee4/phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java index 8c33954..4f8b6a6 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java @@ -134,7 +134,7 @@ public class ParallelIterators extends ExplainTable implements ResultIterators { public ParallelIterators(QueryPlan plan, Integer perScanLimit, ParallelIteratorFactory iteratorFactory) throws SQLException { - super(plan.getContext(), plan.getTableRef(), plan.getGroupBy()); + super(plan.getContext(), plan.getTableRef(), plan.getGroupBy(), plan.getOrderBy(), plan.getStatement().getHint()); this.plan = plan; StatementContext context = plan.getContext(); TableRef tableRef = plan.getTableRef(); http://git-wip-us.apache.org/repos/asf/phoenix/blob/668d6ee4/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java index 8edc7ae..0a39104 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java @@ -51,7 +51,6 @@ import org.apache.phoenix.hbase.index.util.VersionUtil; import org.apache.phoenix.iterate.DelegateResultIterator; import org.apache.phoenix.iterate.MaterializedResultIterator; import org.apache.phoenix.iterate.ResultIterator; -import org.apache.phoenix.parse.HintNode.Hint; import org.apache.phoenix.query.QueryConstants; import org.apache.phoenix.schema.PDataType; import org.apache.phoenix.schema.PDatum; @@ -336,7 +335,7 @@ public class PhoenixDatabaseMetaData implements DatabaseMetaData, org.apache.pho @Override public ResultSet getCatalogs() throws SQLException { - StringBuilder buf = new StringBuilder("select /*+" + Hint.NO_INTRA_REGION_PARALLELIZATION + "*/\n" + + StringBuilder buf = new StringBuilder("select \n" + " DISTINCT " + TENANT_ID + " " + TABLE_CAT + " from " + SYSTEM_CATALOG + " " + SYSTEM_CATALOG_ALIAS + " where " + COLUMN_NAME + " is null" + @@ -392,7 +391,7 @@ public class PhoenixDatabaseMetaData implements DatabaseMetaData, org.apache.pho @Override public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException { - StringBuilder buf = new StringBuilder("select /*+" + Hint.NO_INTRA_REGION_PARALLELIZATION + "*/\n " + + StringBuilder buf = new StringBuilder("select \n " + TENANT_ID + " " + TABLE_CAT + "," + // use this for tenant id TABLE_SCHEM + "," + TABLE_NAME + " ," + @@ -650,7 +649,7 @@ public class PhoenixDatabaseMetaData implements DatabaseMetaData, org.apache.pho if (unique) { // No unique indexes return emptyResultSet; } - StringBuilder buf = new StringBuilder("select /*+" + Hint.NO_INTRA_REGION_PARALLELIZATION + "*/\n" + + StringBuilder buf = new StringBuilder("select \n" + TENANT_ID + " " + TABLE_CAT + ",\n" + // use this column for column family name TABLE_SCHEM + ",\n" + DATA_TABLE_NAME + " " + TABLE_NAME + ",\n" + @@ -803,7 +802,7 @@ public class PhoenixDatabaseMetaData implements DatabaseMetaData, org.apache.pho if (table == null || table.length() == 0) { return emptyResultSet; } - StringBuilder buf = new StringBuilder("select /*+" + Hint.NO_INTRA_REGION_PARALLELIZATION + "*/\n" + + StringBuilder buf = new StringBuilder("select \n" + TENANT_ID + " " + TABLE_CAT + "," + // use catalog for tenant_id TABLE_SCHEM + "," + TABLE_NAME + " ," + @@ -877,7 +876,7 @@ public class PhoenixDatabaseMetaData implements DatabaseMetaData, org.apache.pho @Override public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException { - StringBuilder buf = new StringBuilder("select /*+" + Hint.NO_INTRA_REGION_PARALLELIZATION + "*/\n distinct " + + StringBuilder buf = new StringBuilder("select distinct \n" + TENANT_ID + " " + TABLE_CATALOG + "," + // no catalog for tables TABLE_SCHEM + " from " + SYSTEM_CATALOG + " " + SYSTEM_CATALOG_ALIAS + @@ -902,7 +901,7 @@ public class PhoenixDatabaseMetaData implements DatabaseMetaData, org.apache.pho @Override public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException { - StringBuilder buf = new StringBuilder("select /*+" + Hint.NO_INTRA_REGION_PARALLELIZATION + "*/\n" + + StringBuilder buf = new StringBuilder("select \n" + TENANT_ID + " " + TABLE_CAT + "," + // Use tenantId for catalog TABLE_SCHEM + "," + TABLE_NAME + "," + @@ -989,7 +988,7 @@ public class PhoenixDatabaseMetaData implements DatabaseMetaData, org.apache.pho @Override public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException { - StringBuilder buf = new StringBuilder("select /*+" + Hint.NO_INTRA_REGION_PARALLELIZATION + "*/\n" + + StringBuilder buf = new StringBuilder("select \n" + TENANT_ID + " " + TABLE_CAT + "," + // tenant_id is the catalog TABLE_SCHEM + "," + TABLE_NAME + " ," + http://git-wip-us.apache.org/repos/asf/phoenix/blob/668d6ee4/phoenix-core/src/main/java/org/apache/phoenix/parse/HintNode.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/HintNode.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/HintNode.java index 0ded0b5..ea20114 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/parse/HintNode.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/HintNode.java @@ -55,11 +55,6 @@ public class HintNode { */ SKIP_SCAN_HASH_JOIN, /** - * Prevents the spawning of multiple threads during - * query processing. - */ - NO_INTRA_REGION_PARALLELIZATION, - /** * Prevents the usage of indexes, forcing usage * of the data table for a query. */ @@ -100,6 +95,10 @@ public class HintNode { * between 2 selected columns this will be give better performance. */ NO_SEEK_TO_COLUMN, + /** + * Saves an RPC call on the scan. See Scan.setSmall(true) in HBase documentation. + */ + SMALL, }; private final Map<Hint,String> hints; http://git-wip-us.apache.org/repos/asf/phoenix/blob/668d6ee4/phoenix-core/src/test/java/org/apache/phoenix/query/BaseConnectionlessQueryTest.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/test/java/org/apache/phoenix/query/BaseConnectionlessQueryTest.java b/phoenix-core/src/test/java/org/apache/phoenix/query/BaseConnectionlessQueryTest.java index 8ac322f..8f17a7c 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/query/BaseConnectionlessQueryTest.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/query/BaseConnectionlessQueryTest.java @@ -27,6 +27,7 @@ import static org.apache.phoenix.util.TestUtil.JOIN_ORDER_TABLE_FULL_NAME; import static org.apache.phoenix.util.TestUtil.JOIN_SUPPLIER_TABLE_FULL_NAME; import static org.apache.phoenix.util.TestUtil.MULTI_CF_NAME; import static org.apache.phoenix.util.TestUtil.PHOENIX_CONNECTIONLESS_JDBC_URL; +import static org.apache.phoenix.util.TestUtil.PTSDB2_NAME; import static org.apache.phoenix.util.TestUtil.PTSDB3_NAME; import static org.apache.phoenix.util.TestUtil.PTSDB_NAME; import static org.apache.phoenix.util.TestUtil.TABLE_WITH_ARRAY; @@ -104,6 +105,7 @@ public class BaseConnectionlessQueryTest extends BaseTest { ensureTableCreated(getUrl(), ENTITY_HISTORY_TABLE_NAME); ensureTableCreated(getUrl(), FUNKY_NAME); ensureTableCreated(getUrl(), PTSDB_NAME); + ensureTableCreated(getUrl(), PTSDB2_NAME); ensureTableCreated(getUrl(), PTSDB3_NAME); ensureTableCreated(getUrl(), MULTI_CF_NAME); ensureTableCreated(getUrl(), JOIN_ORDER_TABLE_FULL_NAME); http://git-wip-us.apache.org/repos/asf/phoenix/blob/668d6ee4/phoenix-core/src/test/java/org/apache/phoenix/query/QueryPlanTest.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/test/java/org/apache/phoenix/query/QueryPlanTest.java b/phoenix-core/src/test/java/org/apache/phoenix/query/QueryPlanTest.java index fd22e47..1e3df0b 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/query/QueryPlanTest.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/query/QueryPlanTest.java @@ -41,6 +41,14 @@ public class QueryPlanTest extends BaseConnectionlessQueryTest { "CLIENT PARALLEL 1-WAY SKIP SCAN ON 3 KEYS OVER PTSDB3 [~'na3'] - [~'na1']\n" + " SERVER FILTER BY FIRST KEY ONLY", + "SELECT /*+ SMALL*/ host FROM PTSDB3 WHERE host IN ('na1', 'na2','na3')", + "CLIENT PARALLEL 1-WAY SMALL SKIP SCAN ON 3 KEYS OVER PTSDB3 [~'na3'] - [~'na1']\n" + + " SERVER FILTER BY FIRST KEY ONLY", + + "SELECT inst,date FROM PTSDB2 WHERE inst = 'na1' ORDER BY inst DESC, date DESC", + "CLIENT PARALLEL 1-WAY REVERSE RANGE SCAN OVER PTSDB2 ['na1']\n" + + " SERVER FILTER BY FIRST KEY ONLY", + "SELECT host FROM PTSDB WHERE inst IS NULL AND host IS NOT NULL AND date >= to_date('2013-01-01')", "CLIENT PARALLEL 1-WAY RANGE SCAN OVER PTSDB [null,not null]\n" + " SERVER FILTER BY FIRST KEY ONLY AND DATE >= '2013-01-01 00:00:00.000'",
