CQL3 で複合列の範囲を取り込むにはどうすればよいですか?
次の点を考慮してください。
CREATE TABLE Stuff (
a int,
b text,
c text,
d text,
PRIMARY KEY (a,b,c)
);
Cassandra では、これが効果的に行うことは、整数行 (a の値) と、b と c の値およびリテラル文字列 'd' で構成される CompositeColumns を持つ ColumnFamily を作成することです。もちろん、これはすべて CQL3 によって隠蔽されているため、個々のデータベース行に挿入していると考えることができます... しかし、余談です。
そして、次の一連の入力を検討してください。
INSERT INTO Stuff (a,b,c,d) VALUES (1,'A','P','whatever0');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'A','Q','whatever1');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'A','R','whatever2');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'A','S','whatever3');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'A','T','whatever4');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'B','P','whatever5');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'B','Q','whatever6');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'B','R','whatever7');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'B','S','whatever8');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'B','T','whatever9');
私の現在のユース ケースでは、Stuff のすべての値を一度に読み取りたいと考えてn
います。どうすればいいですか?を使用した現在のテイクは次のn=4
とおりです。
SELECT * FROM Stuff WHERE a=1 LIMIT 4;
そして、予想どおり、次のようになります。
a | b | c | d
---+---+---+-----------
1 | A | P | whatever0
1 | A | Q | whatever1
1 | A | R | whatever2
1 | A | S | whatever3
私が遭遇する問題は、次の 4 をどのように取得するかです。これが私の試みです:
SELECT * FROM Stuff WHERE a=1 AND b='A' AND c>'S' LIMIT 4;
これは、b を 'A' に等しくなるように制約しているため機能しません。これは妥当なことです。しかし、とにかく反復を続けることを可能にする CQL3 構文には何も見つかりませんでした。次のようなことができたらいいのにと思います:
SELECT * FROM Stuff WHERE a=1 AND {b,c} > {'A','S'} LIMIT 4;
希望する結果を得るにはどうすればよいですか。つまり、CQL3を返すにはどうすればよいですか:
a | b | c | d
---+---+---+-----------
1 | A | T | whatever0
1 | B | P | whatever1
1 | B | Q | whatever2
1 | B | R | whatever3