You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cassandra3.11.11如何仅用IN运算符检索表ch4列指定字符串

Cassandra 3.11.11 基于IN运算符检索多值字段的可行方案

你当前的写法select * from table1 where 'T04014' IN (ch4)无法直接生效,IN运算符要求右侧为值列表,当ch4是单个拼接字符串时,只会判断'T04014'是否等于ch4的完整值,无法匹配字符串内部的子串。以下是完全符合你要求(仅用IN、不用LIKE,可调整主键设置)的可行方案:


最优方案:调整数据模型为宽行结构,将ch4单个值纳入主键

该方案完全贴合Cassandra的分布式存储规则,查询性能最优,完全满足IN查询要求。

1. 重建表调整主键结构

将原来单条数据对应多个ch4值的结构,拆分为每个ch4值对应一行数据,把ch4设为聚类键(也可根据查询需求设为分区键):

CREATE TABLE table1 (
    ch1 text,
    ch2 bigint,
    ch3 bigint,
    ch4 text,
    -- 可根据实际查询场景调整主键顺序,这里保留ch1为分区键,ch4为第一聚类键
    PRIMARY KEY (ch1, ch4, ch2)
);

如果你的查询场景固定为仅按ch4检索,也可以直接把ch4设为分区键,查询时不需要带ch1条件。

2. 按新结构写入数据

将原来的单条数据按ch4的不同值拆分为多行写入:

-- 写入第一条示例数据
INSERT INTO table1 (ch1, ch2, ch3, ch4) VALUES ('LD', 9813970, 1484914, 'T03103');
INSERT INTO table1 (ch1, ch2, ch3, ch4) VALUES ('LD', 9813970, 1484914, 'T04014');
-- 写入第二条示例数据
INSERT INTO table1 (ch1, ch2, ch3, ch4) VALUES ('LD', 1008203, 1486104, 'T03103');
INSERT INTO table1 (ch1, ch2, ch3, ch4) VALUES ('LD', 1008203, 1486104, 'T04024');

3. 用IN运算符执行查询

完全符合你的使用要求,不需要用到LIKE:

-- 检索所有包含T04014的数据
SELECT * FROM table1 WHERE ch1='LD' AND ch4 IN ('T04014');
-- 同时检索多个ch4值也可直接扩展IN列表
SELECT * FROM table1 WHERE ch1='LD' AND ch4 IN ('T04014', 'T04024');

如果需要返回去重后的原始数据行,只需要在查询时加上DISTINCT ch1, ch2, ch3即可。


补充可选方案(不符合仅用IN要求,仅作参考)

如果不想改宽行结构,也可以将ch4设为set<text>类型并创建二级索引,但该方案需要用CONTAINS关键字查询,性能低于宽行方案,仅适合数据量不大的场景。

内容的提问来源于stack exchange,提问作者Rajesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:24:05