StarRocks/starrocks

Global UDF not woking in async materialized view

Ouverte

#76 240 ouverte le 12 juil. 2026

 (1 commentaire) (0 réaction) (0 personne assignée)Java (1 246 forks)batch import
good first issuetype/bug

Métriques du dépôt

Stars
 (5 717 étoiles)
Métriques de merge PR
 (Merge moyen 1j 5h) (1 000 PRs mergées en 30 j)

Description

Steps to reproduce the behavior (Required)

CREATE TABLE example_table
(
    col1 VARCHAR(10)
)
ENGINE = olap
DUBLICATE KEY(col1 )
DISTRIBUTED BY HASH(col1);
CREATE OR REPLACE GLOBAL FUNCTION test_func(a STRING)
    RETURNS
      a;
CREATE MATERIALIZED VIEW IF NOT EXISTS udf_bug_test
REFRESH async AS
select test_func(item) from example_table;

Expected behavior (Required)

Materialized view is created and can be used for rewrite query

Real behavior (Required)

select QUERY_REWRITE_STATUS from information_schema.materialized_views WHERE table_name = 'udf_bug_test' UNKNOWN: MV plan is not in cache, valid check is unknown

And error is logged:

2026-07-12 22:53:04.640+03:00 WARN (mv-plan-cache-4|105) [MvPlanContextBuilder.doGetOptimizePlan():67] Failed to build mv plan context
 com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException: Cannot invoke "com.starrocks.catalog.UserIdentity.isEphemeral()" because "userIdentity" is null
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2085)
	at com.google.common.cache.LocalCache.get(LocalCache.java:4011)
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4034)
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5010)
	at com.starrocks.authorization.AuthorizationMgr.mergePrivilegeCollection(AuthorizationMgr.java:1005)
	at com.starrocks.authorization.NativeAccessController.checkFunctionAction(NativeAccessController.java:295)
	at com.starrocks.authorization.NativeAccessController.checkGlobalFunctionAction(NativeAccessController.java:173)
	at com.starrocks.sql.analyzer.Authorizer.checkGlobalFunctionAction(Authorizer.java:277)
	at com.starrocks.sql.analyzer.AnalyzerUtils.getGlobalUdfFunction(AnalyzerUtils.java:260)
	at com.starrocks.sql.analyzer.AnalyzerUtils.getUdfFunction(AnalyzerUtils.java:275)
	at com.starrocks.sql.analyzer.FunctionAnalyzer.getAnalyzedFunctionImpl(FunctionAnalyzer.java:889)
	at com.starrocks.sql.analyzer.FunctionAnalyzer.getAnalyzedFunction(FunctionAnalyzer.java:778)
	at com.starrocks.sql.analyzer.ExpressionAnalyzer$Visitor.visitFunctionCall(ExpressionAnalyzer.java:1115)
	at com.starrocks.sql.analyzer.ExpressionAnalyzer$Visitor.visitFunctionCall(ExpressionAnalyzer.java:443)
	at com.starrocks.sql.ast.expression.FunctionCallExpr.accept(FunctionCallExpr.java:363)
	at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:94)
	at com.starrocks.sql.analyzer.ExpressionAnalyzer.bottomUpAnalyze(ExpressionAnalyzer.java:439)
	at com.starrocks.sql.analyzer.ExpressionAnalyzer.analyze(ExpressionAnalyzer.java:155)
	at com.starrocks.sql.analyzer.ExpressionAnalyzer.analyzeExpression(ExpressionAnalyzer.java:2192)
	at com.starrocks.sql.analyzer.SelectAnalyzer.analyzeExpression(SelectAnalyzer.java:875)
	at com.starrocks.sql.analyzer.SelectAnalyzer.analyzeSelect(SelectAnalyzer.java:303)
	at com.starrocks.sql.analyzer.SelectAnalyzer.analyze(SelectAnalyzer.java:90)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.visitSelect(QueryAnalyzer.java:520)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.visitSelect(QueryAnalyzer.java:334)
	at com.starrocks.sql.ast.SelectRelation.accept(SelectRelation.java:234)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.process(QueryAnalyzer.java:342)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.visitQueryRelation(QueryAnalyzer.java:357)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.visitQueryStatement(QueryAnalyzer.java:347)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.visitQueryStatement(QueryAnalyzer.java:334)
	at com.starrocks.sql.ast.QueryStatement.accept(QueryStatement.java:71)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.process(QueryAnalyzer.java:342)
	at com.starrocks.sql.analyzer.QueryAnalyzer.analyze(QueryAnalyzer.java:144)
	at com.starrocks.sql.analyzer.Analyzer$AnalyzerVisitor.visitQueryStatement(Analyzer.java:498)
	at com.starrocks.sql.analyzer.Analyzer$AnalyzerVisitor.visitQueryStatement(Analyzer.java:201)
	at com.starrocks.sql.ast.QueryStatement.accept(QueryStatement.java:71)
	at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:94)
	at com.starrocks.sql.analyzer.Analyzer.analyze(Analyzer.java:198)
	at com.starrocks.sql.optimizer.rule.transformation.materialization.MvUtils.getRuleOptimizedLogicalPlan(MvUtils.java:538)
	at com.starrocks.sql.optimizer.MaterializedViewOptimizer.optimizeImpl(MaterializedViewOptimizer.java:120)
	at com.starrocks.sql.optimizer.MaterializedViewOptimizer.optimize(MaterializedViewOptimizer.java:42)
	at com.starrocks.sql.optimizer.MaterializedViewOptimizer.optimize(MaterializedViewOptimizer.java:33)
	at com.starrocks.sql.optimizer.MvPlanContextBuilder.lambda$getPlanContext$0(MvPlanContextBuilder.java:49)
	at com.starrocks.sql.optimizer.MvPlanContextBuilder.doGetOptimizePlan(MvPlanContextBuilder.java:64)
	at com.starrocks.sql.optimizer.MvPlanContextBuilder.getPlanContext(MvPlanContextBuilder.java:49)
	at com.starrocks.sql.optimizer.CachingMvPlanContextBuilder.loadMvPlanContext(CachingMvPlanContextBuilder.java:227)
	at com.starrocks.sql.optimizer.CachingMvPlanContextBuilder$1.lambda$asyncLoad$0(CachingMvPlanContextBuilder.java:79)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.NullPointerException: Cannot invoke "com.starrocks.catalog.UserIdentity.isEphemeral()" because "userIdentity" is null
	at com.starrocks.authorization.AuthorizationMgr.loadPrivilegeCollection(AuthorizationMgr.java:1028)
	at com.starrocks.authorization.AuthorizationMgr$1.load(AuthorizationMgr.java:104)
	at com.starrocks.authorization.AuthorizationMgr$1.load(AuthorizationMgr.java:99)
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3570)
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2312)
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2189)
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2079)
	... 49 more

StarRocks version (Required)

  • 4.1.1-14b7e3f

Guide contributeur