@Test public void testReplaceAlias() throws LensException { String query = "select fact.time_key,time_dim.day_of_week,time_dim.day," + "case when sum(fact.dollars_sold) = 0 then 0.0 else sum(fact.dollars_sold) end dollars_sold " + "from db.sales_fact as fact " + "inner join time_dim as time_dim on fact.time_key = time_dim.time_key " + "inner join db.location_dim ld on fact.location_key = ld.location_key " + "and ld.location_name = 'test123' " + "where time_dim.time_key between '2013-01-01' and '2013-01-31' " + "group by fact.time_key,time_dim.day_of_week,time_dim.day " + "order by dollars_sold desc "; String actual = qtest.rewrite(query, conf, hconf); String expected = "select ( sales_fact__db_sales_fact_fact . time_key ), ( time_dim___time_dim . day_of_week ), " + "( time_dim___time_dim . day ), case when (sum(alias2) = 0 ) " + "then 0.0 else sum(alias2) end as `dollars_sold` from (select sales_fact__db_sales_fact_fact" + ".time_key, " + "sales_fact__db_sales_fact_fact.location_key,sum(( sales_fact__db_sales_fact_fact . dollars_sold )) " + "as alias1, sum(( sales_fact__db_sales_fact_fact . dollars_sold )) as alias2 from db.sales_fact " + "sales_fact__db_sales_fact_fact where sales_fact__db_sales_fact_fact.time_key in " + "( select time_dim .time_key from time_dim where ( time_dim. time_key ) " + "between '2013-01-01' and '2013-01-31' ) and sales_fact__db_sales_fact_fact.location_key in " + "( select location_dim .location_key from location_dim where (( location_dim. location_name ) " + "= 'test123' ) ) group by sales_fact__db_sales_fact_fact.time_key, " + "sales_fact__db_sales_fact_fact.location_key) sales_fact__db_sales_fact_fact " + "inner join (select time_key,day_of_week,day from time_dim) time_dim___time_dim on " + "(( sales_fact__db_sales_fact_fact . time_key ) = ( time_dim___time_dim . time_key )) " + "inner join (select location_key,location_name from db.location_dim) " + "location_dim__db_location_dim_ld on ((( sales_fact__db_sales_fact_fact . location_key ) " + "= ( location_dim__db_location_dim_ld . location_key )) and (( location_dim__db_location_dim_ld . " + "location_name ) = 'test123' )) where ( time_dim___time_dim . time_key ) between " + "'2013-01-01' and '2013-01-31' group by ( sales_fact__db_sales_fact_fact . time_key ), " + "( time_dim___time_dim . day_of_week ), ( time_dim___time_dim . day ) " + "order by dollars_sold desc"; compareQueries(actual, expected); }
protected void replaceAlias(ASTNode tree) { if (TOK_TABLE_OR_COL == tree.getToken().getType()) { ASTNode alias = (ASTNode) tree.getChild(0); if (mapAliases.get(tree.getChild(0).toString()) != null) { alias.getToken().setText(mapAliases.get(tree.getChild(0).toString())); } else { alias.getToken().setText(tree.getChild(0).toString()); } } for (int i = 0; i < tree.getChildCount(); i++) { replaceAlias((ASTNode) tree.getChild(i)); } }
ColumnarSQLRewriter implements QueryRewriter { protected void replaceAlias(ASTNode tree) { if (TOK_TABLE_OR_COL == tree.getToken().getType()) { ASTNode alias = (ASTNode) tree.getChild(0); if (mapAliases.get(tree.getChild(0).toString()) != null) { alias.getToken().setText(mapAliases.get(tree.getChild(0).toString())); } else { alias.getToken().setText(tree.getChild(0).toString()); } } for (int i = 0; i < tree.getChildCount(); i++) { replaceAlias((ASTNode) tree.getChild(i)); } } }
ColumnarSQLRewriter implements QueryRewriter { protected void replaceAlias(ASTNode tree) { if (TOK_TABLE_OR_COL == tree.getToken().getType()) { ASTNode alias = (ASTNode) tree.getChild(0); if (mapAliases.get(tree.getChild(0).toString()) != null) { alias.getToken().setText(mapAliases.get(tree.getChild(0).toString())); } else { alias.getToken().setText(tree.getChild(0).toString()); } } for (int i = 0; i < tree.getChildCount(); i++) { replaceAlias((ASTNode) tree.getChild(i)); } } ColumnarSQLRewriter(); }
ColumnarSQLRewriter implements QueryRewriter { protected void replaceAlias(ASTNode tree) { if (TOK_TABLE_OR_COL == tree.getToken().getType()) { ASTNode alias = (ASTNode) tree.getChild(0); if (mapAliases.get(tree.getChild(0).toString()) != null) { alias.getToken().setText(mapAliases.get(tree.getChild(0).toString())); } else { alias.getToken().setText(tree.getChild(0).toString()); } } for (int i = 0; i < tree.getChildCount(); i++) { replaceAlias((ASTNode) tree.getChild(i)); } } ColumnarSQLRewriter(); @Override void init(Configuration conf); String getClause(); void analyzeInternal(Configuration conf, HiveConf hconf); String getTableFromTabRefNode(ASTNode tree); void getJoinCond(ASTNode node); StringBuilder constructJoinChain(); int getColumnCount(ASTNode node); boolean isExpressionsAnswerableFromFact(ASTNode node); void getFilterInJoinCond(ASTNode node); String getFactAlias(); void factFilterPushDown(ASTNode node); void getFactKeysFromNode(ASTNode node); void getAllFactKeys(); void getAllDimColumns(ASTNode node); void buildDimSubqueries(); void buildSubqueries(ASTNode node); String getTableOrAlias(String keyString, String type); ArrayList<String> getAggregateColumns(ASTNode node, MutableInt count); ArrayList<String> getTablesAndColumns(ASTNode node); String getLimitClause(ASTNode node); void getAllFilters(ASTNode node); String getFactNameAlias(ASTNode fromAST); void reset(); String replaceUDFForDB(String query); void replaceAliasInAST(); void buildQuery(Configuration conf, HiveConf hconf); @Override String rewrite(String query, Configuration conf, HiveConf metastoreConf); }
ColumnarSQLRewriter implements QueryRewriter { protected void replaceAlias(ASTNode tree) { if (TOK_TABLE_OR_COL == tree.getToken().getType()) { ASTNode alias = (ASTNode) tree.getChild(0); if (mapAliases.get(tree.getChild(0).toString()) != null) { alias.getToken().setText(mapAliases.get(tree.getChild(0).toString())); } else { alias.getToken().setText(tree.getChild(0).toString()); } } for (int i = 0; i < tree.getChildCount(); i++) { replaceAlias((ASTNode) tree.getChild(i)); } } ColumnarSQLRewriter(); @Override void init(Configuration conf); String getClause(); void analyzeInternal(Configuration conf, HiveConf hconf); String getTableFromTabRefNode(ASTNode tree); void getJoinCond(ASTNode node); StringBuilder constructJoinChain(); int getColumnCount(ASTNode node); boolean isExpressionsAnswerableFromFact(ASTNode node); void getFilterInJoinCond(ASTNode node); String getFactAlias(); void factFilterPushDown(ASTNode node); void getFactKeysFromNode(ASTNode node); void getAllFactKeys(); void getAllDimColumns(ASTNode node); void buildDimSubqueries(); void buildSubqueries(ASTNode node); String getTableOrAlias(String keyString, String type); ArrayList<String> getAggregateColumns(ASTNode node, MutableInt count); ArrayList<String> getTablesAndColumns(ASTNode node); String getLimitClause(ASTNode node); void getAllFilters(ASTNode node); String getFactNameAlias(ASTNode fromAST); void reset(); String replaceUDFForDB(String query); void replaceAliasInAST(); void buildQuery(Configuration conf, HiveConf hconf); @Override String rewrite(String query, Configuration conf, HiveConf metastoreConf);  }