[ 
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)

Reply via email to