【详述】建表是主键和排序键分离的,count的结果不准确
【背景】
【业务影响】
【StarRocks版本】3.0.1
【集群规模】3fe+4be
【机器信息】48C/64G/万兆
【联系方式】社区群13-番茄西红柿,谢谢
【附件】
统计结果截图:
图一
图二
图三:正确的统计结果
建表语句:
v7_ddl.sql (1.9 KB) v4_ddl.sql (2.0 KB)
【详述】建表是主键和排序键分离的,count的结果不准确
【背景】
【业务影响】
【StarRocks版本】3.0.1
【集群规模】3fe+4be
【机器信息】48C/64G/万兆
【联系方式】社区群13-番茄西红柿,谢谢
【附件】
统计结果截图:
图一
建表语句:
v7_ddl.sql (1.9 KB) v4_ddl.sql (2.0 KB)
@dongquan 请问这个情况是因为建表的语句问题么? 排序键必须包含主键么?
我们测试
情况1:建表语句 排序键不包含主键, 如果查询sql语句包含排序键 就会出现数据不全的情况。
情况2:建表语句 排序键包含所有的主键, 查询sql语句包含排序键 结果就正常。
主键模型建表时 通过 order by指定排序键,3.0.4版本应该修了不少相关问题,可以升级到3.0.4版本再测试一下
正常是可以的,排序键会去自动创建前缀索引,之前这块有点问题,后面版本修复了
@Doni
情况1:
select count(sf_id)
from tzpingtaiold_tz_sdk_log_pf_order_v7
where tz_account_id=2165
能查出来 263条数据,
情况2:
select count(tz_server_id)
from tzpingtaiold_tz_sdk_log_pf_order_v7
where tz_account_id=2165
能查出来 2 条数据,
ddl:
CREATE TABLE tzpingtaiold_tz_sdk_log_pf_order_v7
(
game_id
bigint(20) NOT NULL COMMENT “游戏ID 0:平台官网注册”,
channel_id
bigint(20) NOT NULL COMMENT “渠道ID”,
pf_order_id
varchar(65533) NOT NULL COMMENT “平台订单ID”,
sf_id
bigint(20) NOT NULL COMMENT “唯一ID”,
create_time
datetime NOT NULL COMMENT “创建时间”,
tz_server_id
bigint(20) NULL COMMENT “区服ID”,
tz_account_id
bigint(20) NULL COMMENT “平台帐号ID”,
role_id
bigint(20) NULL COMMENT “角色ID”,
role_name
varchar(65533) NULL COMMENT “角色名有作为筛选条件,关联角色表比较耗性能”,
real_amount
bigint(20) NULL COMMENT “实际支付金额”,
total_amount
bigint(20) NULL COMMENT “总金额”,
) ENGINE=OLAP
PRIMARY KEY(game_id
, channel_id
, pf_order_id
, sf_id
, create_time
)
COMMENT “平台订单表”
PARTITION BY RANGE(create_time
)
(PARTITION p20200101 VALUES [(“2020-01-01 00:00:00”), (“2020-01-02 00:00:00”)),
PARTITION p20230727 VALUES [(“2023-07-27 00:00:00”), (“2023-07-28 00:00:00”)))
DISTRIBUTED BY HASH(sf_id
) BUCKETS 3
ORDER BY(tz_account_id
, tz_server_id
)
升级前前缀索引写的有问题,升级后重新建表导数 再查看看
目前暂时没有,需要重新建表导数。主要原因是前缀索引在写入的时候写错了,升级后 没办法对写错的进行纠正,目前只能通过重新建表导数写正确的进去
理论上是可行的,不过这个版本上发现了一个alter重新指定排序键的一个bug,所以不建议您在这个版本上直接使用alter来解决这个问题。如果实在是不能重新建表,可以等我修复后给你一个临时的包试下
问题已经定位了,这两天会修下,到时候我可以给你打个临时包试下
异步的。本质是一个alter任务,alter任务不影响数据写入
请问您这边修好了么?我们一个线上业务等着这个临时包才能上线
我可以给你基于最新的3.0分支上临时编译一个BE的二进制,留个联系方式我发给你?