我在 Cassandra 中有以下列族,用于将时间序列数据存储在少量非常“宽”的行中:
CREATE TABLE data_bucket (
day_of_year int,
minute_of_day int,
event_id int,
data ascii,
PRIMARY KEY (data_of_year, minute_of_day, event_id)
)
在 CQL shell 上,我可以运行如下查询:
select * from data_bucket where day_of_year = 266 and minute_of_day = 244
and event_id in (4, 7, 11, 1990, 3433)
本质上,我修复了复合列名称 (minute_of_day) 的第一个组成部分的值,并希望根据第二个组成部分 (event_id) 的不同值选择一组不连续的列。由于“IN”关系被解释为等式关系,因此可以正常工作。
现在我的问题是,我如何在没有 CQL 的情况下以编程方式完成相同类型的复合列切片。到目前为止,我已经尝试过 Python 客户端 pycassa 和 Java 客户端 Astyanax,但没有任何成功。
任何想法都会受到欢迎。
编辑:
我正在添加通过 cassandra-cli 看到的列族的描述输出。由于我正在寻找基于 Thrift 的解决方案,也许这会有所帮助。
ColumnFamily: data_bucket
Key Validation Class: org.apache.cassandra.db.marshal.Int32Type
Default column value validator: org.apache.cassandra.db.marshal.AsciiType
Cells sorted by: org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.Int32Type,org.apache.cassandra.db.marshal.Int32Type)
GC grace seconds: 864000
Compaction min/max thresholds: 4/32
Read repair chance: 0.1
DC Local Read repair chance: 0.0
Populate IO Cache on flush: false
Replicate on write: true
Caching: KEYS_ONLY
Bloom Filter FP chance: default
Built indexes: []
Compaction Strategy: org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy
Compression Options:
sstable_compression: org.apache.cassandra.io.compress.SnappyCompressor