lklong opened a new pull request #763: how to create custom measure URL: https://github.com/apache/kylin/pull/763 hi all, how to create custom measure? I can not find any doc for definning my custom measure,if you know how to do this,please tell me,thank you! I do this and got error like blew: ------------------------------------------------------MySumMeasureType.java--------------------------------------------- package com.demo.kylin.custom.mysum; import org.apache.kylin.measure.MeasureAggregator; import org.apache.kylin.measure.MeasureIngester; import org.apache.kylin.measure.MeasureType; import org.apache.kylin.measure.MeasureTypeFactory; import org.apache.kylin.metadata.datatype.DataType; import org.apache.kylin.metadata.model.FunctionDesc; @SuppressWarnings({ "rawtypes", "serial" }) public class MySumMeasureType extends MeasureType<Long> { public static class Factory extends MeasureTypeFactory { @Override public MeasureType<Long> createMeasureType(String funcName, DataType dataType) { return new MySumMeasureType(funcName, dataType); } @Override public String getAggrFunctionName() { return "MYSUM"; } @Override public String getAggrDataTypeName() { return "mysum"; } @Override public Class getAggrDataTypeSerializer() { return null; } } private final String funcName; private final DataType dataType; public MySumMeasureType(String funcName, DataType dataType) { this.funcName = funcName; this.dataType = dataType; } @Override public void validate(FunctionDesc functionDesc) throws IllegalArgumentException { } @Override public MeasureIngester<Long> newIngester() { return new MyLongIngester(); } @Override public MeasureAggregator<Long> newAggregator() { return new MyLongSumAggregator(); } @Override public boolean needRewrite() { return true; } } --------------------------------------------------------MyLongSumAggregator--------------------------------------------------- package com.demo.kylin.custom.mysum; import org.apache.kylin.measure.MeasureAggregator; /** */ @SuppressWarnings("serial") public class MyLongSumAggregator extends MeasureAggregator<Long> { Long sum = new Long(0L); @Override public void reset() { sum = new Long(0L); } @Override public void aggregate(Long value) { sum += value; } @Override public Long aggregate(Long value1, Long value2) { return Long.valueOf(value1 + value2); } @Override public Long getState() { return sum; } @Override public int getMemBytesEstimate() { return guessLongMemBytes(); } } ------------------------------MyLongIngester--------------------------------------------------------------------------------------- package com.demo.kylin.custom.mysum; import org.apache.kylin.common.util.Dictionary; import org.apache.kylin.measure.MeasureIngester; import org.apache.kylin.metadata.model.MeasureDesc; import org.apache.kylin.metadata.model.TblColRef; import java.util.Map; public class MyLongIngester extends MeasureIngester<Long> { @Override public Long valueOf(String[] values, MeasureDesc measureDesc, Map<TblColRef, Dictionary<String>> dictionaryMap) { if (values.length > 1) throw new IllegalArgumentException(); if (values[0] == null || values[0].length() == 0) return new Long(0L); else return Long.valueOf(values[0]); } @Override public void reset() { } } -------------------------------------------------------------kylin.properties add config like blew------------------------------ kylin.metadata.custom-measure-types.MYSUM=com.demo.kylin.custom.mysum.MySumMeasureType$Factory ---------------------------------------------------------i got error stack------------------------------------------------------------- org.apache.kylin.measure.dim.DimCountDistinctMeasureType$Factory 2019-07-19 14:35:13,993 INFO [localhost-startStop-1] measure.MeasureTypeFactory:146 : registering MYSUM(mysum), class com.demo.kylin.custom.mysum.MySumMeasureType$Factory 2019-07-19 14:35:44,213 INFO [BadQueryDetector] service.BadQueryDetector:147 : Detect bad query. 2019-07-19 14:35:44,216 INFO [FetcherRunner 24686388-46] threadpool.DefaultFetcherRunner:94 : Job Fetcher: 0 should running, 0 actual running, 0 stopped, 0 ready, 8 already succeed, 3 error, 0 discarded, 0 others 2019-07-19 14:36:18,241 INFO [FetcherRunner 24686388-46] threadpool.DefaultFetcherRunner:94 : Job Fetcher: 0 should running, 0 actual running, 0 stopped, 0 ready, 8 already succeed, 3 error, 0 discarded, 0 others 2019-07-19 14:36:43,755 INFO [FetcherRunner 24686388-46] threadpool.DefaultFetcherRunner:94 : Job Fetcher: 0 should running, 0 actual running, 0 stopped, 0 ready, 8 already succeed, 3 error, 0 discarded, 0 others 2019-07-19 14:36:43,758 WARN [localhost-startStop-1] cube.CubeDescManager:104 : Broken cube desc sum1 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at org.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:466) at org.apache.kylin.metadata.model.DataModelManager.getInstance(DataModelManager.java:52) at org.apache.kylin.cube.model.CubeDesc.init(CubeDesc.java:633) at org.apache.kylin.cube.CubeDescManager$1.initEntityAfterReload(CubeDescManager.java:102) at org.apache.kylin.cube.CubeDescManager$1.initEntityAfterReload(CubeDescManager.java:95) at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAt(CachedCrudAssist.java:159) at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadQuietlyAt(CachedCrudAssist.java:141) at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAll(CachedCrudAssist.java:124) at org.apache.kylin.cube.CubeDescManager.<init>(CubeDescManager.java:112) at org.apache.kylin.cube.CubeDescManager.newInstance(CubeDescManager.java:75) 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.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:464) at org.apache.kylin.cube.CubeDescManager.getInstance(CubeDescManager.java:67) at org.apache.kylin.cube.CubeInstance.init(CubeInstance.java:146) at org.apache.kylin.cube.CubeManager$1.initEntityAfterReload(CubeManager.java:140) at org.apache.kylin.cube.CubeManager$1.initEntityAfterReload(CubeManager.java:137) at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAt(CachedCrudAssist.java:159) at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadQuietlyAt(CachedCrudAssist.java:141) at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAll(CachedCrudAssist.java:124) at org.apache.kylin.cube.CubeManager.<init>(CubeManager.java:151) at org.apache.kylin.cube.CubeManager.newInstance(CubeManager.java:108) 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.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:464) at org.apache.kylin.cube.CubeManager.getInstance(CubeManager.java:103) at org.apache.kylin.stream.coordinator.Coordinator$StreamingBuildJobStatusChecker.<init>(Coordinator.java:1316) at org.apache.kylin.stream.coordinator.Coordinator$StreamingBuildJobStatusChecker.<init>(Coordinator.java:1314) at org.apache.kylin.stream.coordinator.Coordinator.<init>(Coordinator.java:146) at org.apache.kylin.stream.coordinator.Coordinator.getInstance(Coordinator.java:174) at org.apache.kylin.rest.service.StreamingCoordinatorService.<init>(StreamingCoordinatorService.java:50) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1147) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1099) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:443) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:325) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5157) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5680) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1018) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:994) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2021) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.reflect.InvocationTargetException 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.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:464) ... 80 more Caused by: java.lang.RuntimeException: Failed to init DataModelManager from kylin_metadata@hbase at org.apache.kylin.metadata.model.DataModelManager.newInstance(DataModelManager.java:62) ... 85 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.kylin.metadata.model.DataModelManager.newInstance(DataModelManager.java:60) ... 85 more Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at org.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:466) at org.apache.kylin.metadata.TableMetadataManager.getInstance(TableMetadataManager.java:68) at org.apache.kylin.metadata.model.DataModelManager.init(DataModelManager.java:98) at org.apache.kylin.metadata.model.DataModelManager.<init>(DataModelManager.java:79) ... 90 more Caused by: java.lang.reflect.InvocationTargetException 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.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:464) ... 93 more Caused by: java.lang.ExceptionInInitializerError at org.apache.kylin.metadata.datatype.DataType.<clinit>(DataType.java:133) at org.apache.kylin.metadata.model.ColumnDesc.init(ColumnDesc.java:211) at org.apache.kylin.metadata.model.TableDesc.init(TableDesc.java:333) at org.apache.kylin.metadata.TableMetadataManager$1.initEntityAfterReload(TableMetadataManager.java:122) at org.apache.kylin.metadata.TableMetadataManager$1.initEntityAfterReload(TableMetadataManager.java:118) at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAt(CachedCrudAssist.java:159) at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadQuietlyAt(CachedCrudAssist.java:141) at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAll(CachedCrudAssist.java:124) at org.apache.kylin.metadata.TableMetadataManager.initSrcTable(TableMetadataManager.java:126) at org.apache.kylin.metadata.TableMetadataManager.<init>(TableMetadataManager.java:98) at org.apache.kylin.metadata.TableMetadataManager.newInstance(TableMetadataManager.java:73) ... 98 more Caused by: java.lang.IllegalArgumentException: Unrecognized MeasureTypeFactory classname: com.demo.kylin.custom.mysum.MySumMeasureType$Factory at org.apache.kylin.measure.MeasureTypeFactory.init(MeasureTypeFactory.java:126) at org.apache.kylin.measure.MeasureTypeFactory.<clinit>(MeasureTypeFactory.java:98) ... 109 more Caused by: java.lang.ClassCastException: com.demo.kylin.custom.mysum.MySumMeasureType$Factory cannot be cast to org.apache.kylin.measure.MeasureTypeFactory at org.apache.kylin.measure.MeasureTypeFactory.init(MeasureTypeFactory.java:124) ... 110 more
---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services
