[teiid-issues] [JBoss JIRA] (TEIID-4113) Impala translator - Incorrect aggregate replacement in query

Don Krapohl (JIRA) issues at jboss.org
Mon Apr 4 15:02:00 EDT 2016


    [ https://issues.jboss.org/browse/TEIID-4113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13186137#comment-13186137 ] 

Don Krapohl edited comment on TEIID-4113 at 4/4/16 3:01 PM:
------------------------------------------------------------

Thanks for the code.  Here's my un-obfuscated version with my scenario:

{{    public void testExecImpalaTimeStampWithAgg() throws Exception {
        ImpalaExecutionFactory ief = new ImpalaExecutionFactory();
        ief.setDatabaseVersion("2.0");
        ief.start();

        DefaultCapabilitiesFinder finder = new DefaultCapabilitiesFinder(CapabilitiesConverter.convertCapabilities(ief));
        TransformationMetadata tm = RealMetadataFactory.fromDDL("create foreign table faatd (num_items_net long, " +
                "pub_comm_base bigdecimal, orderid string(255), trans_date_key String(255), advertiser_key long); " +
                "create foreign table dim_date (trans_date_key string(255), trans_year string(4));"
                + " create view AATD (advertiser_key long, trans_date_key string(255), trans_year string(4), " +
                "num_items_net long, pub_comm_base bigdecimal, orderid string(255)) " +
                "as (select advertiser_key, f.trans_date_key, trans_year, num_items_net, pub_comm_base, " +
                "orderid from faatd f inner join dim_date d on f.trans_date_key=d.trans_date_key)", "x", "y");
        HardcodedDataManager dataMgr = new HardcodedDataManager();
        dataMgr.setMustRegisterCommands(false);
        List<?>[] expected = new List<?>[] {  };

        dataMgr.addData("SELECT g_0.trans_date_key, convert((SUM(g_0.num_items_net) / " +
                "convert(COUNT(DISTINCT CASE WHEN g_0.pub_comm_base >= 0 THEN g_0.orderid END), long)), double), " +
                "g_0.orderid FROM y.faatd AS g_0 WHERE g_0.advertiser_key = 111 " +
                "GROUP BY g_0.trans_date_key, g_0.orderid", //$NON-NLS-1$
                expected);

        String query="SELECT faatd.trans_date_key, cast( sum( num_items_net ) / " +
                "count( distinct case when pub_comm_base >= 0 then pub_comm_base end ) as double ) as some_alias, " +
                "PARSETIMESTAMP(orderid, 'yyyy-MM-dd') as somedate " +
                " FROM faatd WHERE advertiser_key=111 GROUP BY faatd.trans_date_key, orderid";
         doProcess(tm, query, finder, dataMgr, expected, DEBUG);
    }}}


was (Author: don.krapohl):
Thanks for the code.  Here's my un-obfuscated version with my scenario:

    public void testExecImpalaTimeStampWithAgg() throws Exception {
        ImpalaExecutionFactory ief = new ImpalaExecutionFactory();
        ief.setDatabaseVersion("2.0");
        ief.start();

        DefaultCapabilitiesFinder finder = new DefaultCapabilitiesFinder(CapabilitiesConverter.convertCapabilities(ief));
        TransformationMetadata tm = RealMetadataFactory.fromDDL("create foreign table faatd (num_items_net long, " +
                "pub_comm_base bigdecimal, orderid string(255), trans_date_key String(255), advertiser_key long); " +
                "create foreign table dim_date (trans_date_key string(255), trans_year string(4));"
                + " create view AATD (advertiser_key long, trans_date_key string(255), trans_year string(4), " +
                "num_items_net long, pub_comm_base bigdecimal, orderid string(255)) " +
                "as (select advertiser_key, f.trans_date_key, trans_year, num_items_net, pub_comm_base, " +
                "orderid from faatd f inner join dim_date d on f.trans_date_key=d.trans_date_key)", "x", "y");
        HardcodedDataManager dataMgr = new HardcodedDataManager();
        dataMgr.setMustRegisterCommands(false);
        List<?>[] expected = new List<?>[] {  };

        dataMgr.addData("SELECT g_0.trans_date_key, convert((SUM(g_0.num_items_net) / " +
                "convert(COUNT(DISTINCT CASE WHEN g_0.pub_comm_base >= 0 THEN g_0.orderid END), long)), double), " +
                "g_0.orderid FROM y.faatd AS g_0 WHERE g_0.advertiser_key = 111 " +
                "GROUP BY g_0.trans_date_key, g_0.orderid", //$NON-NLS-1$
                expected);

        String query="SELECT faatd.trans_date_key, cast( sum( num_items_net ) / " +
                "count( distinct case when pub_comm_base >= 0 then pub_comm_base end ) as double ) as some_alias, " +
                "PARSETIMESTAMP(orderid, 'yyyy-MM-dd') as somedate " +
                " FROM faatd WHERE advertiser_key=111 GROUP BY faatd.trans_date_key, orderid";
         doProcess(tm, query, finder, dataMgr, expected, DEBUG);
    }

> Impala translator - Incorrect aggregate replacement in query
> ------------------------------------------------------------
>
>                 Key: TEIID-4113
>                 URL: https://issues.jboss.org/browse/TEIID-4113
>             Project: Teiid
>          Issue Type: Bug
>          Components: JDBC Connector
>    Affects Versions: 8.13.3
>         Environment: Ubuntu Trusty
>            Reporter: Don Krapohl
>            Assignee: Steven Hawkins
>              Labels: Impala_Translator
>
> When PARSETIMESTAMP is included in a query aggregates in other columns may not be written correctly.  Example is  as below, sum(first_metric) is rewritten to anon_grp0.agg0 in the query sent to Impala.
> Given the schema:
> //source
> SourceTable
> the_attribute string(255),
> first_metric long,
> second_metric bigdecimal
> another_attribute String(255)
> //view
> VirtualTable
> the_attribute string(255),
> first_metric long,
> second_metric bigdecimal
> another_attribute String(255)
> //  Teiid query
> SELECT the_attribute,
> cast(
>   sum(
>     first_metric
>   ) 
>   / 
>   count(
>     distinct case when  second_metric >= 0 then second_metric end
>   ) as double
> )  as some_alias,
> PARSETIMESTAMP(another_attribute, 'yyyy-MM-dd') as somedate
> FROM VirtualTable 
> WHERE a_filter_val=111 
> GROUP BY the_attribute, another_attribute
> //Query sent to impala
> SELECT g_0.the_attribute AS c_0, 
> cast(
>   (
>     anon_grp0.agg0 
>     / 
>     cast(
>     anon_grp0.agg1 AS bigint
>     )
>   ) AS double
> ) AS c_1, 
> g_0.another_attribute AS c_2 
> FROM VirtualTable
> WHERE a_filter_val=111
> GROUP BY g_0.the_attribute, g_0.another_attribute



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the teiid-issues mailing list