Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

analysis-api服务npe问题,不影响界面但看日志常常能看到这个空指针难受 #367

Open
tzxylao opened this issue Dec 11, 2023 · 1 comment
Labels
enhancement New feature or request help wanted Extra attention is needed

Comments

@tzxylao
Copy link

tzxylao commented Dec 11, 2023

image

执行SQL

WITH __rawVariation AS (

 SELECT 

     user_key, time, toggle_key, variation_index AS variation 

 FROM access

 WHERE sdk_key = 'server-76748534ae5654b9e74aaaf63914ce0c7b3a0a48'),

     __uniqVariation AS (

 SELECT 

     v.user_key, v.variation

 FROM __rawVariation v 

 WHERE 

     v.toggle_key = 'switch_1' and v.time > '1702278962212' and v.time < '1702280420753'

 GROUP BY v.user_key, v.variation),

     __rawMetric AS (SELECT user_key, time, value FROM events WHERE name = 'click_num' AND sdk_key = 'server-76748534ae5654b9e74aaaf63914ce0c7b3a0a48'),

     __metricUserValue AS (

 SELECT 

     user_key, COUNT(*) AS value

 FROM __rawMetric v 

 WHERE 

     v.time > '1702278962212' and v.time < '1702280420753'

 GROUP BY user_key),

     __userValueVariation AS (SELECT v.user_key, v.variation, m.value FROM __uniqVariation v LEFT JOIN __metricUserValue m ON m.user_key = v.user_key),

     __variationMean AS (SELECT AVG(COALESCE(value, 0)) AS mean, variation, COUNT(*) AS count FROM __userValueVariation GROUP BY variation),

     __userTotalMean AS (SELECT j.user_key, j.value AS user_value, t.mean AS total_mean, j.variation FROM __userValueVariation j, __variationMean t where j.variation = t.variation),

     __variationVariance AS (SELECT POWER(user_value - total_mean, 2) AS variance, variation FROM __userTotalMean),

     __variationStdDeviation AS (SELECT SQRT(SUM(variance)) AS std_deviation, variation FROM __variationVariance group by variation)

 SELECT s.variation, s.std_deviation, t.mean, t.count FROM __variationStdDeviation s, __variationMean t

 WHERE s.variation = t.variation AND t.count > 1;

得到的结果如下
image
其中std_deviation数据很容易为空,比如刚开始的时候,没有数据,左关联__metricUserValue,而__metricUserValue表没数据就会导致value没值,反应到代码就是
image
std_deviation为空,取不到double值就npe了,默认给个0也行哈

@FengShang FengShang added enhancement New feature or request help wanted Extra attention is needed labels Dec 12, 2023
@curdlx
Copy link

curdlx commented Mar 6, 2024

加和类事件,也会有类似问题。没有进入实验组的用户,没有上报数据,导致在指标分析时analysis报错,请问这种何解?:

[ERROR][2024-03-06T17:19:46.812+0800][http-nio-4006-exec-7][DirectJDKLog.java:175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
at kotliquery.Row.double(Row.kt:161)
at com.featureprobe.api.analysis.AnalysisService$gaussianSqlExecute$1$1.invoke(AnalysisController.kt:290)
at com.featureprobe.api.analysis.AnalysisService$gaussianSqlExecute$1$1.invoke(AnalysisController.kt:286)
at kotliquery.Session$rows$1$1$rows$1.invoke(Session.kt:122)
at kotliquery.Session$rows$1$1$rows$1.invoke(Session.kt:122)
at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210)
at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:170)
at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:194)
at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:214)
at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:786)
at kotlin.sequences.SequencesKt___SequencesKt.toMutableList(_Sequences.kt:816)
at kotlin.sequences.SequencesKt___SequencesKt.toList(_Sequences.kt:807)
at kotliquery.Session$rows$1$1.invoke(Session.kt:123)
at kotliquery.Session$rows$1$1.invoke(Session.kt:121)
at kotliquery.LoanPattern.using(LoanPattern.kt:11)
at kotliquery.Session$rows$1.invoke(Session.kt:121)
at kotliquery.Session$rows$1.invoke(Session.kt:120)
at kotliquery.LoanPattern.using(LoanPattern.kt:11)
at kotliquery.Session.rows(Session.kt:120)
at kotliquery.Session.list(Session.kt:220)
at kotliquery.action.ListResultQueryAction.runWithSession(ListResultQueryAction.kt:13)
at kotliquery.Session.run(Session.kt:299)
at com.featureprobe.api.analysis.AnalysisService.gaussianSqlExecute(AnalysisController.kt:284)
at com.featureprobe.api.analysis.AnalysisService.doAnalysisGaussian(AnalysisController.kt:236)
at com.featureprobe.api.analysis.AnalysisService.doAnalysis(AnalysisController.kt:210)
at com.featureprobe.api.analysis.AnalysisController.analysis(AnalysisController.kt:69)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:670)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:779)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

3 participants