時系列データを少数の非常に「広い」行に格納するために、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 シェルでは、次のようなクエリを実行できます。
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) の最初のコンポーネントの値を修正し、2 番目のコンポーネント (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