【StarRocks版本】2.5.1
使用窗口函数,如row number,rank等作为子查询,在where 中限制排序为1,会发现查询结果中出现丢失,多次查询丢失数据不同。
【StarRocks版本】2.5.1
使用窗口函数,如row number,rank等作为子查询,在where 中限制排序为1,会发现查询结果中出现丢失,多次查询丢失数据不同。
具体的查询例子和结果集发下?
tmp_error_by_window.csv (31.4 KB)
SELECT
*
FROM (
SELECT *
, row_number() OVER (PARTITION BY asin,月,年份,国家 ORDER BY ts_ms DESC ) AS rn
FROM tmp.error_by_window
) mt
WHERE mt.rn = 1
;
可以试下这个SQL,每次查询结果都不一样
麻烦提供下建表语句,还有执行sql时的所有session变量(show variables)
建表语句
– tmp.error_by_window definition
CREATE TABLE error_by_window (
dt date NULL COMMENT “”,
tenant_id bigint(20) NULL COMMENT “”,
运营人员 varchar(1048576) NULL COMMENT “”,
年份 bigint(20) NULL COMMENT “”,
月 bigint(20) NULL COMMENT “”,
国家 varchar(1048576) NULL COMMENT “”,
品牌 varchar(1048576) NULL COMMENT “”,
品类 varchar(1048576) NULL COMMENT “”,
asin varchar(1048576) NULL COMMENT “”,
销售额 tinyint(4) NOT NULL COMMENT “”,
ts_ms bigint(20) NULL COMMENT “”
) ENGINE=OLAP
DUPLICATE KEY(dt, tenant_id, 运营人员)
COMMENT “OLAP”
DISTRIBUTED BY HASH(asin) BUCKETS 21
PROPERTIES (
“replication_num” = “3”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”,
“enable_persistent_index” = “false”,
“compression” = “LZ4”
);
你在问题中表达的「结果不一样」是指结果的顺序不稳定么?
SELECT * FROM (
SELECT *,
row_number() OVER (PARTITION BY asin,月,年份,国家 ORDER BY ts_ms DESC ) AS rn
FROM error_by_window
) mt
WHERE mt.rn = 1
这个sql中,虽然在窗口函数的子句中指定了partition by列和order by列,但是这个只影响窗口函数的执行,但并不保证最终结果也按照这些列排序。
如果要得到稳定的结果,要在最后加个order by,如下,你可以试下这个sql的结果是否稳定
SELECT * FROM (
SELECT *,
row_number() OVER (PARTITION BY asin,月,年份,国家 ORDER BY ts_ms DESC ) AS rn
FROM error_by_window
) mt
WHERE mt.rn = 1
ORDER BY asin,月,年份,国家, ts_ms
好的,我本地按照你提供的建表语句以及数据无法复现你说的这个问题。麻烦提供下两个不同结果的profile,我这边再根据profile分析一下。
我也无法提供更多的信息了,问题表现是每次返回的结果是随机数量,并不固定

我们没有对应的选项
貌似社区版是从fe_ip:8030看profile文件的。。你这个是be的界面
show frontends,可以查IP和端口
「IP」和「HttpPort」
查了,只能是admin登录吗
应该就是查询的账号密码吧。