[
https://issues.apache.org/jira/browse/ASTERIXDB-2471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16795266#comment-16795266
]
Dmitry Lychagin commented on ASTERIXDB-2471:
--------------------------------------------
Aliases for SQL aggregates have been implemented by
https://asterix-gerrit.ics.uci.edu/#/c/3278/
(stddev() -> stddev_samp(), variance() -> var_samp(), etc)
SQL++ aggregate aliases are not yet implemented. It's not clear whether they
are needed at all at this point because aggregate function names are slightly
different in SQL++ anyway (array_* and strict_*).
> 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
> Priority: Major
>
> 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)