【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登录吗
应该就是查询的账号密码吧。