【BUG】视图中包含窗口函数,并涉及ignore nulls关键字时,创建后的视图会去掉ignore nulls,导致视图结果与原sql结果不符

【详述】视图中包含窗口函数,并涉及ignore nulls关键字时,创建后的视图会去掉ignore nulls,导致视图结果与原sql结果不符
【背景】创建视图
【业务影响】
【是否存算分离】否
【StarRocks版本】3.4.2
【集群规模】1fe+3be
【联系方式】crouch123@qq.com

创建视图语句为:
create view v_test
as
select *,
last_value(score IGNORE NULLS)
over (
partition by subject
order by score desc
rows between unbounded preceding and unbounded following
) as last
from scores;

通过show create view v_test查看视图的创建语句为:
create view v_test
as
select *,
last_value(score)
over (
partition by subject
order by score desc
rows between unbounded preceding and unbounded following
) as last
from scores;

缺少了 IGNORE NULLS,导致结果不正确

感觉问题已经很明显了,有哪个版本已经修复这个问题了么

我这边没有看到历史中有反馈过这个问题,我在3.5.6 的版本做了个测试发现,没有这个问题。 您可以考虑升级下看看

我换了3.5.6版本的试了下,还是有同样的问题,创建视图时用了cte
create view v_test
as
with a as (
select * from source_table
), b as (
select *
, first_value(columnA ignore nulls) over(…) first_value_column
from a
) select * from b

用show create 语句查看还是没有ignore nulls

试了下嵌套子查询也不行,也是同样的问题

我 这边测试没发现有问题。
image

,可以发下您的完整 test sql 看下,

或者select 的sql 可以获取下query dump https://docs.mirrorship.cn/zh/docs/faq/Dump_query/

我在first_value里用了if函数 first_value(if (event_type = ‘4’ , control_value, null) IGNORE nulls)
show create view 里的内容就去掉了ignore nulls
不用函数只用字段名确实会保留ignore nulls,
那我再包一层试试

试了下,first_value里使用if函数就会有上面去掉ignore nulls的问题,我改成直接取字段名,就没问题了