You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "James Fang (JIRA)" <ji...@apache.org> on 2018/10/30 18:45:00 UTC

[jira] [Created] (ASTERIXDB-2471) CommonFuctionMapUtil Alias do not work correctly for distinct and serializable functions

James Fang created ASTERIXDB-2471:
-------------------------------------

             Summary: CommonFuctionMapUtil Alias do not work correctly for distinct and serializable functions
                 Key: ASTERIXDB-2471
                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-2471
             Project: Apache AsterixDB
          Issue Type: Bug
          Components: FUN - Functions
            Reporter: James Fang


When trying to implement correct alias for stddev that are used in existing database systems (Postgres, Oracle), there were problems in getting the alias to work correctly for distinct and serializable aggregates.

The following alias were created for this:

stddev  --> sql-stddev_samp

array_stddev  --> sql-stddev_samp

strict_stddev  --> stddev_samp

 

For distinct aggregates, test the following query:

{
 't1': to_bigint(array_stddev(distinct [10,20,30,10,20,30,10])),
 't2': to_bigint(array_stddev(distinct [null,missing,null,missing])),
 't3': to_bigint(array_stddev(distinct [40,null,missing,50,40,null,missing,50,40])),
 't4': to_bigint(array_stddev(distinct []))
};

You will receive the following error:

java.lang.Exception: ASX1079: Compilation error: function Default.strict_stddev-distinct@1 is not defined (in line 20, at column 20)
 at org.apache.asterix.test.common.ResultExtractor.checkForErrors(ResultExtractor.java:185) ~[test-classes/:?]
 at org.apache.asterix.test.common.ResultExtractor.extract(ResultExtractor.java:117) ~[test-classes/:?]
 at org.apache.asterix.test.common.ResultExtractor.extract(ResultExtractor.java:87) ~[test-classes/:?]
 at org.apache.asterix.test.common.TestExecutor.executeQuery(TestExecutor.java:1217) ~[test-classes/:?]
 at org.apache.asterix.test.common.TestExecutor.executeTestFile(TestExecutor.java:900) ~[test-classes/:?]
 at org.apache.asterix.test.common.TestExecutor.executeTest(TestExecutor.java:1622) [test-classes/:?]
 at org.apache.asterix.test.runtime.LangExecutionUtil.test(LangExecutionUtil.java:132) [test-classes/:?]
 at org.apache.asterix.test.runtime.LangExecutionUtil.test(LangExecutionUtil.java:119) [test-classes/:?]
 at org.apache.asterix.test.runtime.SqlppExecutionTest.test(SqlppExecutionTest.java:62) [test-classes/:?]
 at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source) ~[?:?]
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_131]
 at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_131]
 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) [junit-4.12.jar:4.12]
 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12]
 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) [junit-4.12.jar:4.12]
 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) [junit-4.12.jar:4.12]
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) [junit-4.12.jar:4.12]
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12]
 at org.junit.runners.Suite.runChild(Suite.java:128) [junit-4.12.jar:4.12]
 at org.junit.runners.Suite.runChild(Suite.java:27) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12]
 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) [junit-4.12.jar:4.12]
 at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) [junit-4.12.jar:4.12]
 at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12]
 at org.junit.runner.JUnitCore.run(JUnitCore.java:137) [junit-4.12.jar:4.12]
 at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) [junit-rt.jar:?]
 at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) [junit-rt.jar:?]
 at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) [junit-rt.jar:?]
 at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) [junit-rt.jar:?]

 

For serializable aggregates, it cannot resolve the identifier for the variables passed in. The query is:

drop dataverse test if exists;
create dataverse test;

use test;

create type test.TestType as
{
 id : bigint,
 gid : bigint,
 val : double
};

create dataset Test(TestType) primary key id;

insert into Test
select element \{'id':0,'gid':1,'val':double(4.32),'valplus':double(473847.0)};
insert into Test
select element \{'id':1,'gid':1,'val':double(5.32)};
insert into Test
select element \{'id':2,'gid':1,'val':double(6.32),'valplus':double(38473827484738239.0)};
insert into Test
select element \{'id':3,'gid':1,'val':double(4.32),'valplus':double(678900.0)};
insert into Test
select element \{'id':4,'gid':1,'val':double(4.32),'valplus':null};

select gid, stddev(t.val) as stddev
from Test as t
/* +hash */
group by t.gid as gid;

The following error occurs:

ERROR org.apache.asterix - ASX1074: Cannot resolve ambiguous alias reference for identifier t (in line 26, at column 20)
org.apache.asterix.common.exceptions.CompilationException: ASX1074: Cannot resolve ambiguous alias reference for identifier t (in line 26, at column 20)
 at org.apache.asterix.lang.sqlpp.rewrites.visitor.VariableCheckAndRewriteVisitor.resolve(VariableCheckAndRewriteVisitor.java:132) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.rewrites.visitor.VariableCheckAndRewriteVisitor.visit(VariableCheckAndRewriteVisitor.java:74) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.rewrites.visitor.VariableCheckAndRewriteVisitor.visit(VariableCheckAndRewriteVisitor.java:50) ~[classes/:?]
 at org.apache.asterix.lang.common.expression.FieldAccessor.accept(FieldAccessor.java:51) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:359) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:373) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:308) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.rewrites.visitor.VariableCheckAndRewriteVisitor.visit(VariableCheckAndRewriteVisitor.java:210) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.rewrites.visitor.VariableCheckAndRewriteVisitor.visit(VariableCheckAndRewriteVisitor.java:50) ~[classes/:?]
 at org.apache.asterix.lang.common.expression.CallExpr.accept(CallExpr.java:62) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:359) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:112) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:66) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.clause.Projection.accept(Projection.java:46) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:169) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:66) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.clause.SelectRegular.accept(SelectRegular.java:40) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:155) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:66) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.clause.SelectClause.accept(SelectClause.java:43) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:145) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:66) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.struct.SetOperationInput.accept(SetOperationInput.java:57) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor.visit(AbstractSqlppExpressionScopingVisitor.java:194) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor.visit(AbstractSqlppExpressionScopingVisitor.java:59) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.clause.SelectSetOperation.accept(SelectSetOperation.java:47) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor.visit(AbstractSqlppExpressionScopingVisitor.java:308) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor.visit(AbstractSqlppExpressionScopingVisitor.java:59) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.expression.SelectExpression.accept(SelectExpression.java:55) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:359) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor.visit(AbstractSqlppExpressionScopingVisitor.java:214) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor.visit(AbstractSqlppExpressionScopingVisitor.java:59) ~[classes/:?]
 at org.apache.asterix.lang.common.statement.Query.accept(Query.java:94) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.rewrites.SqlppQueryRewriter.variableCheckAndRewrite(SqlppQueryRewriter.java:213) ~[classes/:?]
 at org.apache.asterix.lang.sqlpp.rewrites.SqlppQueryRewriter.rewrite(SqlppQueryRewriter.java:119) ~[classes/:?]
 at org.apache.asterix.api.common.APIFramework.reWriteQuery(APIFramework.java:191) ~[classes/:?]
 at org.apache.asterix.app.translator.QueryTranslator.rewriteCompileQuery(QueryTranslator.java:1978) ~[classes/:?]
 at org.apache.asterix.app.translator.QueryTranslator.lambda$handleQuery$2(QueryTranslator.java:2489) ~[classes/:?]
 at org.apache.asterix.app.translator.QueryTranslator.createAndRunJob(QueryTranslator.java:2614) ~[classes/:?]
 at org.apache.asterix.app.translator.QueryTranslator.deliverResult(QueryTranslator.java:2523) ~[classes/:?]
 at org.apache.asterix.app.translator.QueryTranslator.handleQuery(QueryTranslator.java:2502) ~[classes/:?]
 at org.apache.asterix.app.translator.QueryTranslator.compileAndExecute(QueryTranslator.java:393) ~[classes/:?]
 at org.apache.asterix.api.http.server.ApiServlet.post(ApiServlet.java:155) [classes/:?]
 at org.apache.hyracks.http.server.AbstractServlet.handle(AbstractServlet.java:92) [classes/:?]
 at org.apache.hyracks.http.server.HttpRequestHandler.handle(HttpRequestHandler.java:80) [classes/:?]
 at org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:65) [classes/:?]
 at org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:37) [classes/:?]
 at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_131]
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_131]
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_131]
 at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131]



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)