Skip to content

[Bug] BE crash after refresh MATERIALIZED VIEW #58081

@lujie19930803

Description

@lujie19930803

Search before asking

  • I had searched in the issues and found no similar issues.

Version

3.0.3

What's Wrong?

when i refresh MATERIALIZED VIEW. the be crashed.
be.out:

F20251117 13:35:34.790050 22073 assert_cast.h:48] Bad cast from type:doris::vectorized::ColumnNullable* to doris::vectorized::ColumnVector const*
*** Check failure stack trace: ***
@ 0x55975248d556 google::LogMessage::SendToLog()
@ 0x559752489fa0 google::LogMessage::Flush()
@ 0x55975248dd99 google::LogMessageFatal::~LogMessageFatal()
@ 0x55974c5cab20 ZZ11assert_castIPKN5doris10vectorized12ColumnVectorIhEEL18TypeCheckOnRelease1EPKNS1_7IColumnEET_OT1_ENKUlOSA_E_clIS9_EES5_SD
@ 0x55974c5ca727 assert_cast<>()
@ 0x55974c5ca16d doris::vectorized::change_null_to_true()
@ 0x55974c5c8476 doris::vectorized::VRuntimeFilterWrapper::execute()
@ 0x55974c5b68bb doris::vectorized::VExprContext::execute()
@ 0x55974c5b8055 doris::vectorized::VExprContext::execute_conjuncts()
@ 0x55974c5b7aa3 doris::vectorized::VExprContext::execute_conjuncts_and_filter_block()
@ 0x55974c5b79f5 doris::vectorized::VExprContext::filter_block()
@ 0x55975225ae7a doris::pipeline::MultiCastDataStreamerSourceOperatorX::get_block()
@ 0x5597515a170e doris::pipeline::OperatorXBase::get_block_after_projects()
@ 0x5597523b881b doris::pipeline::PipelineTask::execute()
@ 0x5597523c868d doris::pipeline::TaskScheduler::_do_work()
@ 0x55974802e428 doris::ThreadPool::dispatch_thread()
@ 0x5597480233a1 doris::Thread::supervise_thread()
@ 0x7f265aa34ea5 start_thread
@ 0x7f265b463b0d __clone
@ (nil) (unknown)
*** Query id: 345f0f72d2d5440e-9d27a1ef4bdd26d4 ***
*** is nereids: 1 ***
*** tablet id: 0 ***
*** Aborted at 1763357735 (unix time) try "date -d @1763357735" if you are using GNU date ***
*** Current BE git commitID: 62a58bf ***
*** SIGABRT unknown detail explain (@0x4f73) received by PID 20339 (TID 22073 OR 0x7f20fc223700) from PID 20339; stack trace: ***
0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t*, void*) at /home/zcp/repo_center/doris_release/doris/be/src/common/signal_handler.h:421
1# 0x00007F265B39B400 in /lib64/libc.so.6
2# gsignal in /lib64/libc.so.6
3# abort in /lib64/libc.so.6
4# 0x0000559752497E2D in /data/doris/be/lib/doris_be
5# 0x000055975248A46A in /data/doris/be/lib/doris_be
6# google::LogMessage::SendToLog() in /data/doris/be/lib/doris_be
7# google::LogMessage::Flush() in /data/doris/be/lib/doris_be
8# google::LogMessageFatal::~LogMessageFatal() in /data/doris/be/lib/doris_be
9# doris::vectorized::ColumnVector const* assert_cast<doris::vectorized::ColumnVector const*, (TypeCheckOnRelease)1, doris::vectorized::IColumn const*>(doris::vectorized::IColumn const*&&)::{lambda(auto:1&&)#1}::operator()<doris::vectorized::IColumn const*>(doris::vectorized::IColumn const*&&) const at /home/zcp/repo_center/doris_release/doris/be/src/vec/common/assert_cast.h:48
10# doris::vectorized::ColumnVector const* assert_cast<doris::vectorized::ColumnVector const*, (TypeCheckOnRelease)1, doris::vectorized::IColumn const*>(doris::vectorized::IColumn const*&&) at /home/zcp/repo_center/doris_release/doris/be/src/vec/common/assert_cast.h:72
11# doris::vectorized::change_null_to_true(COWdoris::vectorized::IColumn::immutable_ptrdoris::vectorized::IColumn, COWdoris::vectorized::IColumn::immutable_ptrdoris::vectorized::IColumn) at /home/zcp/repo_center/doris_release/doris/be/src/vec/utils/util.hpp:207
12# doris::vectorized::VRuntimeFilterWrapper::execute(doris::vectorized::VExprContext*, doris::vectorized::Block*, int*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exprs/vruntimefilter_wrapper.cpp:114
13# doris::vectorized::VExprContext::execute(doris::vectorized::Block*, int*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exprs/vexpr_context.cpp:55
14# doris::vectorized::VExprContext::execute_conjuncts(std::vector<std::shared_ptrdoris::vectorized::VExprContext, std::allocator<std::shared_ptrdoris::vectorized::VExprContext > > const&, std::vector<doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 15ul>, std::allocator<doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 15ul>> > const*, bool, doris::vectorized::Block*, doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 15ul>, bool) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exprs/vexpr_context.cpp:174
15# doris::vectorized::VExprContext::execute_conjuncts_and_filter_block(std::vector<std::shared_ptrdoris::vectorized::VExprContext, std::allocator<std::shared_ptrdoris::vectorized::VExprContext > > const&, doris::vectorized::Block*, std::vector<unsigned int, std::allocator >&, int) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exprs/vexpr_context.cpp:321
16# doris::vectorized::VExprContext::filter_block(std::vector<std::shared_ptrdoris::vectorized::VExprContext, std::allocator<std::shared_ptrdoris::vectorized::VExprContext > > const&, doris::vectorized::Block*, int) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exprs/vexpr_context.cpp:154
17# doris::pipeline::MultiCastDataStreamerSourceOperatorX::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/pipeline/exec/multi_cast_data_stream_source.cpp:99
18# doris::pipeline::OperatorXBase::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/pipeline/exec/operator.cpp:336
19# doris::pipeline::PipelineTask::execute(bool*) at /home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_task.cpp:382
20# doris::pipeline::TaskScheduler::_do_work(unsigned long) at /home/zcp/repo_center/doris_release/doris/be/src/pipeline/task_scheduler.cpp:138
21# doris::ThreadPool::dispatch_thread() in /data/doris/be/lib/doris_be
22# doris::Thread::supervise_thread(void*) at /home/zcp/repo_center/doris_release/doris/be/src/util/thread.cpp:499
23# start_thread in /lib64/libpthread.so.0
24# clone in /lib64/libc.so.6

My mv:

CREATE MATERIALIZED VIEW Ads_ProcessStatistics
BUILD IMMEDIATE
REFRESH AUTO ON MANUAL
PROPERTIES ('replication_num' = '1')
AS
WITH processes AS (
SELECT dp2.Code AS ProjectCode, dp2.Name AS ProjectName, dp.Code AS ProcessCode, dp.Name AS ProcessName
, Count(dd.Code) AS DeviceCount
, MIN(NULLIF(pd.OutDebugStage, '')) AS Stage
FROM Dim_Processes dp
JOIN Dim_Devices dd
ON dp.ProjectCode = dd.ProjectCode
AND dp.Code = dd.ProcessCode
JOIN Dim_Projects dp2 ON dp.ProjectCode <=> dp2.Code
LEFT JOIN Dim_PmsDevices pd ON dd.ProductionPlanNo = pd.PlanNo
GROUP BY dp2.Code, dp2.Name, dp.Code, dp.Name
),
latest_dates AS (
SELECT t.ProjectCode, t.ProcessCode, MAX(t.ShiftDate) AS ShiftDate
, MAX(t.LatestTime) AS LatestTime
FROM (
SELECT dp.ProjectCode, dp.Code AS ProcessCode, MAX(dda.ShiftDate) AS ShiftDate
, max(dda.StartTime) AS LatestTime
FROM Dwd_DeviceStatus dda
JOIN Dim_Devices dd
ON dda.ProjectCode <=> dd.ProjectCode
AND dda.DeviceCode = dd.Code
JOIN Dim_Processes dp
ON dd.ProjectCode <=> dp.ProjectCode
AND dd.ProcessCode = dp.Code
GROUP BY dp.ProjectCode, dp.Code
UNION ALL
SELECT dp.ProjectCode, dp.Code, MAX(dda.ShiftDate)
, max(dda.StartDate)
FROM Dwd_DeviceProductions dda
JOIN Dim_Devices dd
ON dda.ProjectCode <=> dd.ProjectCode
AND dda.DeviceCode = dd.Code
JOIN Dim_Processes dp
ON dd.ProjectCode <=> dp.ProjectCode
AND dd.ProcessCode = dp.Code
GROUP BY dp.ProjectCode, dp.Code
) t
GROUP BY t.ProjectCode, t.ProcessCode
),
prod_datas AS (
SELECT t.ProjectCode, t.ProcessCode
, ROUND(SUM(t.QualifiedQty), 2) AS QualifiedQty
, ROUND(AVG(t.QualifiedRate), 4) AS QualifiedRate
FROM (
SELECT drd.ProjectCode, drd.ProcessCode, drd.LineCode, SUM(ddp.QualifiedQty) AS QualifiedQty
, IF(SUM(ddp.Qty) = 0, NULL, ROUND(SUM(ddp.QualifiedQty) / SUM(ddp.Qty), 6)) AS QualifiedRate
FROM Dws_DeviceProductions ddp
JOIN Dim_ProcessLineRelatedDevices drd
ON ddp.ProjectCode <=> drd.ProjectCode
AND ddp.DeviceCode = drd.DeviceCode
JOIN latest_dates ld
ON ld.ProjectCode <=> ddp.ProjectCode
AND ld.ProcessCode = drd.ProcessCode
AND ld.ShiftDate = ddp.ShiftDate
WHERE ddp.ShiftName = 'WholeDay'
GROUP BY drd.ProjectCode, drd.ProcessCode, drd.LineCode
) t
GROUP BY t.ProjectCode, t.ProcessCode
),
status_durations AS (
SELECT dds.ProjectCode, dd.ProcessCode, SUM(dds.AlarmDuration + dds.WorkDuration) AS TotalWorkDuration
, SUM(dds.AlarmDuration) AS AlarmDuration, SUM(dds.AlarmFrequency) AS AlarmFrequency
FROM Dws_DeviceStatusDurations dds
JOIN Dim_Devices dd
ON dds.ProjectCode <=> dd.ProjectCode
AND dds.DeviceCode = dd.Code
JOIN latest_dates ld
ON ld.ProjectCode <=> dd.ProjectCode
AND ld.ProcessCode = dd.ProcessCode
AND ld.ShiftDate = dds.ShiftDate
WHERE ShiftName = 'WholeDay'
GROUP BY dds.ProjectCode, dd.ProcessCode
),
data_completeness AS (
SELECT t.ProjectCode, dd.ProcessCode, ld.ShiftDate
, ROUND(AVG(t.DataCompleteness), 4) AS DataCompleteness
FROM Dws_DeviceDataCompleteness t
LEFT JOIN Dim_Devices dd
ON t.ProjectCode = dd.ProjectCode
AND t.DeviceCode = dd.Code
JOIN latest_dates ld
ON dd.ProjectCode = ld.ProjectCode
AND dd.ProcessCode = ld.ProcessCode
AND ld.ShiftDate = t.ShiftDate
GROUP BY t.ProjectCode, dd.ProcessCode, ld.ShiftDate
),
stable_scores AS (
SELECT ddsl.ProjectCode, d.ProcessCode
, ROUND(AVG(ddsl.Score), 2) AS StableScore
FROM Dws_DeviceStableScores ddsl
JOIN Dim_Devices d
ON d.ProjectCode <=> ddsl.ProjectCode
AND ddsl.DeviceCode = d.Code
JOIN latest_dates ld
ON ld.ProjectCode = d.ProjectCode
AND ld.ProcessCode = d.ProcessCode
AND ld.ShiftDate = ddsl.ShiftDate
WHERE ddsl.Score > 0
AND ddsl.ShiftName = 'WholeDay'
GROUP BY ddsl.ProjectCode, d.ProcessCode
),
data_accuracy AS (
SELECT d.ProjectCode, d.ProcessCode, ld.ShiftDate
, ROUND(AVG(ddd.DataAccuracy), 4) AS DataAccuracy
FROM Dws_DeviceDataAccuracy ddd
JOIN Dim_Devices d
ON d.ProjectCode <=> ddd.ProjectCode
AND ddd.DeviceCode = d.Code
JOIN latest_dates ld
ON ld.ProjectCode = d.ProjectCode
AND ld.ProcessCode = d.ProcessCode
AND ld.ShiftDate = ddd.ShiftDate
GROUP BY d.ProjectCode, d.ProcessCode, ld.ShiftDate
)
SELECT p.ProjectCode, p.ProjectName, p.ProcessCode, p.ProcessName, p.Stage
, p.DeviceCount, ld.ShiftDate, ld.LatestTime, pd.QualifiedQty, pd.QualifiedRate
, IF(TotalWorkDuration = 0, NULL, ROUND(sd.AlarmDuration / sd.TotalWorkDuration, 4)) AS FaultRate
, sd.AlarmDuration, sd.AlarmFrequency, dcl.DataCompleteness, da.DataAccuracy, ss.StableScore
FROM processes p
LEFT JOIN latest_dates ld
ON p.ProjectCode <=> ld.ProjectCode
AND p.ProcessCode = ld.ProcessCode
LEFT JOIN prod_datas pd
ON pd.ProjectCode <=> p.ProjectCode
AND pd.ProcessCode = p.ProcessCode
LEFT JOIN status_durations sd
ON sd.ProjectCode <=> p.ProjectCode
AND sd.ProcessCode = p.ProcessCode
LEFT JOIN data_completeness dcl
ON p.ProjectCode <=> dcl.ProjectCode
AND p.ProcessCode = dcl.ProcessCode
AND dcl.ShiftDate = ld.ShiftDate
LEFT JOIN data_accuracy da
ON p.ProjectCode <=> da.ProjectCode
AND p.ProcessCode = da.ProcessCode
AND da.ShiftDate = ld.ShiftDate
LEFT JOIN stable_scores ss
ON p.ProjectCode <=> ss.ProjectCode
AND p.ProcessCode = ss.ProcessCode;

What You Expected?

be not crash

How to Reproduce?

No response

Anything Else?

No response

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions