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

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

     [ https://issues.apache.org/jira/browse/ASTERIXDB-2471?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Till updated ASTERIXDB-2471:
----------------------------
    Fix Version/s: 0.9.4.2

> 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
>    Affects Versions: 0.9.4
>            Reporter: James Fang
>            Assignee: Dmitry Lychagin
>            Priority: Major
>             Fix For: 0.9.4.2
>
>
> 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)