Cassandraクエリー操作ピットレコード
例表
1.プライマリ・キー・シーケンス・クエリー・リミット
cassandraプライマリ・キーはpartition keyプライマリ・キーと複数のclustering key複合プライマリ・キーであり、プライマリ・キーのクエリー順序はテーブル構造の定義時と一致しなければならない.
つまり、次のクエリは間違っています.
正しい書き方はこうすべきだ
2.パーティション化プライマリ・キーのクエリー制限
cassandraでパーティション化されたプライマリ・キーは等号またはinでのみクエリーでき、範囲クエリーは使用できません.
つまり生年月日での範囲照会はできません
生年月日inでクエリーする必要があります.inクエリーは効率的ではありませんので、テーブル設計時に注意してください.
3.範囲キークエリー制限
cassandraの範囲クエリーは、条件クエリーの最後の場所にのみ配置できます.たとえば、範囲クエリーageの場合、phoneクエリー条件を追加することはできません.
つまり書き方が間違っているのです
もちろんそうはいかないわけではありませんが、ALLOW FILTERINGを付けなければなりませんが、お勧めはありません
つまり次のような書き方で大丈夫です
4.ソート・ルール
cassandraはテーブルの作成時にソートルールを設定し、現在のテーブルのようにデフォルトでソートします.デフォルトでは、正の順序age、正の順序bornDate、逆の順序createDateが使用されます.手動で逆の順序を設定するには、すべてのソートフィールドを逆にする方法が1つしかありません.つまり、このようにする必要があります.
5.パーティションのプライマリ・キー条件に対するソートの制限
cassandraではソートを使用する限り、デフォルトのソートルールを使用するか逆のソートルールを使用するかにかかわらず、パーティション・プライマリ・キーはクエリーに等しいものしか使用できません(inは使用できますが、INのデータは1つしか使用できません).
だからこのように書くのは間違いです
べきである
または
6.InとOrder byを使用する場合は、ページをグローバルに閉じる必要があります.
転載先:https://www.cnblogs.com/yan7/p/11423382.html
CREATE TABLE employee
(
name TEXT,
age SMALLINT,
phone TEXT,
bornDate DATE,
createDate timestamp,
PRIMARY KEY ((bornDate),name, age,phone, createDate)
)
WITH compression = {
'chunk_length_in_kb' : 256,
'class' : 'LZ4Compressor',
'enabled' : true
} AND CLUSTERING ORDER BY (age asc, bornDate asc, createDate desc )
1.プライマリ・キー・シーケンス・クエリー・リミット
cassandraプライマリ・キーはpartition keyプライマリ・キーと複数のclustering key複合プライマリ・キーであり、プライマリ・キーのクエリー順序はテーブル構造の定義時と一致しなければならない.
つまり、次のクエリは間違っています.
select * from employee where age = 1 and name = ' ' and bornDate='1999-01-01'
正しい書き方はこうすべきだ
select * from employee where bornDate = '1999-01-01' and name =' ' and age=1
2.パーティション化プライマリ・キーのクエリー制限
cassandraでパーティション化されたプライマリ・キーは等号またはinでのみクエリーでき、範囲クエリーは使用できません.
つまり生年月日での範囲照会はできません
select * from employee where bornDate >='1999-01-01' and name=' ';
生年月日inでクエリーする必要があります.inクエリーは効率的ではありませんので、テーブル設計時に注意してください.
select * from employee where bornDate in ('1999-01-01','1999-01-02') and name = ' '
3.範囲キークエリー制限
cassandraの範囲クエリーは、条件クエリーの最後の場所にのみ配置できます.たとえば、範囲クエリーageの場合、phoneクエリー条件を追加することはできません.
つまり書き方が間違っているのです
select * from employee where bornDate = '2019-01-01' and name =' ' and age >18 and phone = '123456'
もちろんそうはいかないわけではありませんが、ALLOW FILTERINGを付けなければなりませんが、お勧めはありません
つまり次のような書き方で大丈夫です
select * from employee where bornDate = '2019-01-01' and name =' ' and age >18 and phone = '123456' allow filtering;
4.ソート・ルール
cassandraはテーブルの作成時にソートルールを設定し、現在のテーブルのようにデフォルトでソートします.デフォルトでは、正の順序age、正の順序bornDate、逆の順序createDateが使用されます.手動で逆の順序を設定するには、すべてのソートフィールドを逆にする方法が1つしかありません.つまり、このようにする必要があります.
select * from employee where bornDate in ('1999-01-01') and name = ' ' order by age desc, bornDate desc, createDate asc
5.パーティションのプライマリ・キー条件に対するソートの制限
cassandraではソートを使用する限り、デフォルトのソートルールを使用するか逆のソートルールを使用するかにかかわらず、パーティション・プライマリ・キーはクエリーに等しいものしか使用できません(inは使用できますが、INのデータは1つしか使用できません).
だからこのように書くのは間違いです
select * from employee where bornDate in ('1999-01-01','1999-01-02') and name = ' ' order by age desc, bornDate desc, createDate asc
べきである
select * from employee where bornDate in ('1999-01-01') and name = ' ' order by age desc, bornDate desc, createDate asc
または
select * from employee where bornDate = '1999-01-01' and name = ' ' order by age desc, bornDate desc, createDate asc
6.InとOrder byを使用する場合は、ページをグローバルに閉じる必要があります.
Cluster.Builder()
.AddContactPoints(cassandraUrls)
// pageSize , , in order by
.WithQueryOptions(new QueryOptions().SetPageSize(int.MaxValue))
.Build();
転載先:https://www.cnblogs.com/yan7/p/11423382.html