【详述】视图表突然查不了,爆cannot find statistics of col: 270: cast错误
【背景】2.5.4升级3.0.3,但升级两天都正常,突然就不行了
【业务影响】查询关联视图表失败
【StarRocks版本】3.0.3
【集群规模】例如:3fe(3follower)+4be(fe与be混部)
【机器信息】32C/128G/万兆
【联系方式】seven08x@qq.com
【附件】
- fe.log/beINFO/相应截图
2023-07-14 17:09:34,495 WARN (starrocks-mysql-nio-pool-67|933653) [StmtExecutor.execute():602] execute Exception, sql select * from v_dim_dates limit 10
java.lang.IllegalStateException: cannot find statistics of col: 270: cast
at com.google.common.base.Preconditions.checkState(Preconditions.java:601) ~[spark-dpp-1.0.0.jar:?]
at com.starrocks.sql.optimizer.statistics.Statistics.getColumnStatistic(Statistics.java:69) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.ExpressionStatisticCalculator$ExpressionStatisticVisitor.visitVariableReference(ExpressionStatisticCalculator.java:76) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.ExpressionStatisticCalculator$ExpressionStatisticVisitor.visitVariableReference(ExpressionStatisticCalculator.java:55) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.operator.scalar.ColumnRefOperator.accept(ColumnRefOperator.java:124) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.ExpressionStatisticCalculator$ExpressionStatisticVisitor.lambda$visitCall$0(ExpressionStatisticCalculator.java:159) ~[starrocks-fe.jar:?]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_362]
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384) ~[?:1.8.0_362]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) ~[?:1.8.0_362]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[?:1.8.0_362]
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[?:1.8.0_362]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_362]
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566) ~[?:1.8.0_362]
at com.starrocks.sql.optimizer.statistics.ExpressionStatisticCalculator$ExpressionStatisticVisitor.visitCall(ExpressionStatisticCalculator.java:159) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.ExpressionStatisticCalculator$ExpressionStatisticVisitor.visitCall(ExpressionStatisticCalculator.java:55) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.operator.scalar.CallOperator.accept(CallOperator.java:203) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.ExpressionStatisticCalculator.calculate(ExpressionStatisticCalculator.java:52) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.ExpressionStatisticCalculator.calculate(ExpressionStatisticCalculator.java:48) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.StatisticsCalculator.visitOperator(StatisticsCalculator.java:208) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.StatisticsCalculator.computeJoinNode(StatisticsCalculator.java:882) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.StatisticsCalculator.visitLogicalJoin(StatisticsCalculator.java:759) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.StatisticsCalculator.visitLogicalJoin(StatisticsCalculator.java:153) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.operator.logical.LogicalJoinOperator.accept(LogicalJoinOperator.java:199) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.statistics.StatisticsCalculator.estimatorStats(StatisticsCalculator.java:169) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.task.DeriveStatsTask.execute(DeriveStatsTask.java:57) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.task.SeriallyTaskScheduler.executeTasks(SeriallyTaskScheduler.java:68) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.Optimizer.memoOptimize(Optimizer.java:461) ~[starrocks-fe.jar:?]
at com.starrocks.sql.optimizer.Optimizer.optimizeByCost(Optimizer.java:168) ~[starrocks-fe.jar:?]
这个表主要是为了补充数据空缺的日期补0
视图表:
CREATE VIEW v_dates ( DATE COMMENT “时间”, stat_date COMMENT “日期”, data_type COMMENT “周期类型” ) COMMENT “the view of date” AS SELECT
a.date,
date_format( a.date, ‘%Y-%m-%d’ ) AS stat_date,
1 AS data_type
FROM
(
SELECT
curdate() - INTERVAL ((
a.a + ( 10 * b.a )) + ( 100 * c.a )) + ( 1000 * d.a ) DAY AS date
FROM
(
SELECT
0 AS a UNION ALL
SELECT
1 AS 1 UNION ALL
SELECT
2 AS 2 UNION ALL
SELECT
3 AS 3 UNION ALL
SELECT
4 AS 4 UNION ALL
SELECT
5 AS 5 UNION ALL
SELECT
6 AS 6 UNION ALL
SELECT
7 AS 7 UNION ALL
SELECT
8 AS 8 UNION ALL
SELECT
9 AS 9
) a
CROSS JOIN (
SELECT
0 AS a UNION ALL
SELECT
1 AS 1 UNION ALL
SELECT
2 AS 2 UNION ALL
SELECT
3 AS 3 UNION ALL
SELECT
4 AS 4 UNION ALL
SELECT
5 AS 5 UNION ALL
SELECT
6 AS 6 UNION ALL
SELECT
7 AS 7 UNION ALL
SELECT
8 AS 8 UNION ALL
SELECT
9 AS 9
) b
CROSS JOIN (
SELECT
0 AS a UNION ALL
SELECT
1 AS 1 UNION ALL
SELECT
2 AS 2 UNION ALL
SELECT
3 AS 3 UNION ALL
SELECT
4 AS 4 UNION ALL
SELECT
5 AS 5 UNION ALL
SELECT
6 AS 6 UNION ALL
SELECT
7 AS 7 UNION ALL
SELECT
8 AS 8 UNION ALL
SELECT
9 AS 9
) c
CROSS JOIN (
SELECT
0 AS a UNION ALL
SELECT
1 AS 1 UNION ALL
SELECT
2 AS 2 UNION ALL
SELECT
3 AS 3 UNION ALL
SELECT
4 AS 4 UNION ALL
SELECT
5 AS 5 UNION ALL
SELECT
6 AS 6 UNION ALL
SELECT
7 AS 7 UNION ALL
SELECT
8 AS 8 UNION ALL
SELECT
9 AS 9
) d
) a;
CREATE VIEW v_dim_dates ( DATE COMMENT “时间”, stat_date COMMENT “日期”, data_type COMMENT “周期类型” ) COMMENT “the view of date dimension” AS
( SELECT a.date, a.stat_date, 1 AS data_type FROM v_dates AS a )
UNION ALL
( SELECT a.date, a.stat_date, 7 AS data_type FROM v_dates AS a WHERE ( dayofweek( a.date )) = 2 )
UNION ALL
( SELECT a.date, a.stat_date, 30 AS data_type FROM v_dates AS a WHERE ( dayofmonth( a.date )) = 1 );