hello, from http://kylin.apache.org/docs16/tutorial/create_cube.html
"You can drag & drop a dimension column to adjust its position in rowkey; Put the mandantory dimension at the begining, then followed the dimensions that heavily involved in filters (where condition). Put high cardinality dimensions ahead of low cardinality dimensions." Other way to improve query performance is use AGG Good Luck !! 2017-04-04 10:01 GMT+01:00 Shailesh Prajapati <shail...@infoworks.io>: > Hi, > > I am using kylin 1.6 and facing a wired issue with Cube description. > Basically, I have two Cube desc having same dimensions, measures, rowkeys, > aggregation groups. The only difference is the ordering of keys in them. > With first cube description, my queries are working and with second i am > getting following exception: > > > java.sql.SQLException: Error while executing SQL "SELECT > sum(ss_ext_sales_price) total_sales, > sum(ss_ext_discount_amt) total_discount, > s_store_id, > s_store_name > FROM > store_sales > LEFT JOIN store > ON (store_sales.ss_store_sk = store.s_store_sk) > GROUP BY > s_store_id, > s_store_name > ORDER BY > total_sales, > total_discount, > s_store_id, > s_store_name > LIMIT 50000": null > at org.apache.calcite.avatica.Helper.createException(Helper. > java:56) > at org.apache.calcite.avatica.Helper.createException(Helper. > java:41) > at org.apache.calcite.avatica.AvaticaStatement.executeInternal( > AvaticaStatement.java:147) > at org.apache.calcite.avatica.AvaticaStatement.executeQuery( > AvaticaStatement.java:208) > at org.apache.kylin.rest.service.QueryService.execute( > QueryService.java:538) > at org.apache.kylin.rest.service.QueryService.queryWithSqlMassage( > QueryService.java:452) > at org.apache.kylin.rest.service.QueryService.query( > QueryService.java:151) > at org.apache.kylin.rest.service.QueryService.doQueryWithCache( > QueryService.java:354) > at org.apache.kylin.rest.controller.QueryController. > query(QueryController.java:69) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke( > NativeMethodAccessorImpl.java:62) > at sun.reflect.DelegatingMethodAccessorImpl.invoke( > DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at org.springframework.web.method.support.InvocableHandlerMethod. > doInvoke(InvocableHandlerMethod.java:221) > at org.springframework.web.method.support.InvocableHandlerMethod. > invokeForRequest(InvocableHandlerMethod.java:136) > at org.springframework.web.servlet.mvc.method.annotation. > ServletInvocableHandlerMethod.invokeAndHandle( > ServletInvocableHandlerMethod. > java:104) > at org.springframework.web.servlet.mvc.method.annotation. > RequestMappingHandlerAdapter.invokeHandleMethod( > RequestMappingHandlerAdapter.java:743) > at org.springframework.web.servlet.mvc.method.annotation. > RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter. > java:672) > at org.springframework.web.servlet.mvc.method. > AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:82) > at org.springframework.web.servlet.DispatcherServlet. > doDispatch(DispatcherServlet.java:933) > at org.springframework.web.servlet.DispatcherServlet. > doService(DispatcherServlet.java:867) > at org.springframework.web.servlet.FrameworkServlet. > processRequest( > FrameworkServlet.java:951) > at org.springframework.web.servlet.FrameworkServlet. > doPost(FrameworkServlet.java:853) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) > at org.springframework.web.servlet.FrameworkServlet. > service(FrameworkServlet.java:827) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) > at org.apache.catalina.core.ApplicationFilterChain. > internalDoFilter( > ApplicationFilterChain.java:303) > at org.apache.catalina.core.ApplicationFilterChain.doFilter( > ApplicationFilterChain.java:208) > at org.apache.tomcat.websocket.server.WsFilter.doFilter( > WsFilter.java:52) > at org.apache.catalina.core.ApplicationFilterChain. > internalDoFilter( > ApplicationFilterChain.java:241) > at org.apache.catalina.core.ApplicationFilterChain.doFilter( > ApplicationFilterChain.java:208) > at org.springframework.security.web.FilterChainProxy$ > VirtualFilterChain.doFilter(FilterChainProxy.java:330) > at org.springframework.security.web.access.intercept. > FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) > at org.springframework.security.web.access.intercept. > FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) > at org.springframework.security.web.FilterChainProxy$ > VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at org.springframework.security.web.access. > ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) > at org.springframework.security.web.FilterChainProxy$ > VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at org.springframework.security.web.authentication. > AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter. > java:113) > at org.springframework.security.web.FilterChainProxy$ > VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at org.springframework.security.web.servletapi. > SecurityContextHolderAwareRequestFilter.doFilter( > SecurityContextHolderAwareRequestFilter.java:54) > at org.springframework.security.web.FilterChainProxy$ > VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at io.infoworks.security.jwt.JwtAuthenticationTokenFilter. > successfulAuthentication(JwtAuthenticationTokenFilter.java:64) > at org.springframework.security.web.authentication. > AbstractAuthenticationProcessingFilter.doFilter( > AbstractAuthenticationProcessingFilter.java:219) > at org.springframework.security.web.FilterChainProxy$ > VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at org.springframework.security.web.context. > SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilt > er.java:87) > at org.springframework.security.web.FilterChainProxy$ > VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at org.springframework.security.web.FilterChainProxy. > doFilterInternal(FilterChainProxy.java:192) > at org.springframework.security.web.FilterChainProxy.doFilter( > FilterChainProxy.java:160) > at org.springframework.web.filter.DelegatingFilterProxy. > invokeDelegate(DelegatingFilterProxy.java:343) > at org.springframework.web.filter.DelegatingFilterProxy.doFilter( > DelegatingFilterProxy.java:260) > at org.apache.catalina.core.ApplicationFilterChain. > internalDoFilter( > ApplicationFilterChain.java:241) > at org.apache.catalina.core.ApplicationFilterChain.doFilter( > ApplicationFilterChain.java:208) > at com.thetransactioncompany.cors.CORSFilter.doFilter( > CORSFilter.java:209) > at com.thetransactioncompany.cors.CORSFilter.doFilter( > CORSFilter.java:244) > at org.apache.catalina.core.ApplicationFilterChain. > internalDoFilter( > ApplicationFilterChain.java:241) > at org.apache.catalina.core.ApplicationFilterChain.doFilter( > ApplicationFilterChain.java:208) > at org.apache.catalina.core.StandardWrapperValve.invoke( > StandardWrapperValve.java:220) > at org.apache.catalina.core.StandardContextValve.invoke( > StandardContextValve.java:122) > at org.apache.catalina.authenticator.AuthenticatorBase.invoke( > AuthenticatorBase.java:505) > at org.apache.catalina.core.StandardHostValve.invoke( > StandardHostValve.java:169) > at org.apache.catalina.valves.ErrorReportValve.invoke( > ErrorReportValve.java:103) > at org.apache.catalina.valves.AccessLogValve.invoke( > AccessLogValve.java:956) > at org.apache.catalina.core.StandardEngineValve.invoke( > StandardEngineValve.java:116) > at org.apache.catalina.connector.CoyoteAdapter.service( > CoyoteAdapter.java:436) > at org.apache.coyote.http11.AbstractHttp11Processor.process( > AbstractHttp11Processor.java:1078) > at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler. > process(AbstractProtocol.java:625) > at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor. > run(JIoEndpoint.java:316) > at java.util.concurrent.ThreadPoolExecutor.runWorker( > ThreadPoolExecutor.java:1142) > at java.util.concurrent.ThreadPoolExecutor$Worker.run( > ThreadPoolExecutor.java:617) > at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run( > TaskThread.java:61) > at java.lang.Thread.run(Thread.java:745) > Caused by: java.lang.IllegalStateException > at org.apache.kylin.gridtable.GTInfo.validateColumnBlocks( > GTInfo.java:198) > at org.apache.kylin.gridtable.GTInfo.validate(GTInfo.java:167) > at org.apache.kylin.gridtable.GTInfo$Builder.build(GTInfo. > java:269) > at org.apache.kylin.cube.gridtable.CubeGridTable. > newGTInfo(CubeGridTable.java:53) > at org.apache.kylin.cube.gridtable.CubeGridTable. > newGTInfo(CubeGridTable.java:36) > at org.apache.kylin.storage.gtrecord.CubeScanRangePlanner. > <init>(CubeScanRangePlanner.java:88) > at org.apache.kylin.storage.gtrecord.CubeSegmentScanner.< > init>(CubeSegmentScanner.java:74) > at org.apache.kylin.storage.gtrecord. > GTCubeStorageQueryBase.search( > GTCubeStorageQueryBase.java:130) > at org.apache.kylin.query.enumerator.OLAPEnumerator. > queryStorage(OLAPEnumerator.java:114) > at org.apache.kylin.query.enumerator.OLAPEnumerator. > moveNext(OLAPEnumerator.java:65) > at Baz$1$1.moveNext(Unknown Source) > at org.apache.calcite.linq4j.EnumerableDefaults.groupBy_( > EnumerableDefaults.java:823) > at org.apache.calcite.linq4j.EnumerableDefaults.groupBy( > EnumerableDefaults.java:758) > at org.apache.calcite.linq4j.DefaultEnumerable.groupBy( > DefaultEnumerable.java:302) > at Baz.bind(Unknown Source) > at org.apache.calcite.jdbc.CalcitePrepare$ > CalciteSignature.enumerable(CalcitePrepare.java:327) > at org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable( > CalciteConnectionImpl.java:282) > at org.apache.calcite.jdbc.CalciteMetaImpl._createIterable( > CalciteMetaImpl.java:553) > at org.apache.calcite.jdbc.CalciteMetaImpl.createIterable( > CalciteMetaImpl.java:544) > at org.apache.calcite.avatica.AvaticaResultSet.execute( > AvaticaResultSet.java:187) > at org.apache.calcite.jdbc.CalciteResultSet.execute( > CalciteResultSet.java:65) > at org.apache.calcite.jdbc.CalciteResultSet.execute( > CalciteResultSet.java:44) > at org.apache.calcite.avatica.AvaticaConnection$1.execute( > AvaticaConnection.java:605) > at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute( > CalciteMetaImpl.java:599) > at org.apache.calcite.avatica.AvaticaConnection. > prepareAndExecuteInternal(AvaticaConnection.java:613) > at org.apache.calcite.avatica.AvaticaStatement.executeInternal( > AvaticaStatement.java:139) > ... 68 more > > > *cube desc 1: * > https://gist.github.com/shaipraj/a09991ad1599bca5f43b38c5565dbebe > *cube desc 2: * > https://gist.github.com/shaipraj/527cec8f03d55234c63d80b06353b7de > > > When i reordered the rowkeys in cube desc 2, my queries worked. My > question, are these rowkeys needs to be in order? if yes then on what > basis? and if not then what this exception is about? > > > Thanks >