仅使用复杂分区键之一进行查询时,Cassandra 查询有效
Cassandra query works when querying only with one of the Complex Partition Key
我是 Cassandra 的初学者,正在通过 data-stax 社区获取教程。
根据文档,在 Cassandra 中,当创建 table 复杂分区键时,在查询 table 时必须同时指定分区键,否则查询将导致错误。
但对我来说,当我仅使用第一个分区键进行查询时它就可以工作。以下是对我有用的示例。
Table 说明:
CREATE TABLE killrvideo.videos5 (
title text,
added_year int,
added_date timestamp,
description text,
user_id uuid,
video_id timeuuid,
PRIMARY KEY (title, added_year)
) WITH CLUSTERING ORDER BY (added_year ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
** 查询:**
cqlsh:killrvideo> select * from videos5 where title='DHANNYA';
结果:
title | added_year | added_date | description | user_id | video_id
---------+------------+---------------------------------+-------------+--------------------------------------+--------------------------------------
DHANNYA | 2018 | 2018-04-23 11:38:12.811000+0000 | Test | 50554d6e-29bb-11e5-b345-feff819cdc9f | ce0de9b1-46ea-11e8-839e-87bbc8b633f5
它应该抛出一个错误,但它没有。我想知道分区键的散列如何仅使用其中一个键来定位数据。
简单的答案:您已将 title 定义为分区键,将 added_year 定义为集群键。这是因为主键中的第一个键始终是分区键,除非您使用括号在分区键中有多个键。因此,在您的示例中,您应该使用以下内容在分区键中包含标题和 added_year:
PRIMARY KEY ((title, added_year))
这在另一个 Whosebug 答案中有进一步解释:https://whosebug.com/a/24953331/1516699
我是 Cassandra 的初学者,正在通过 data-stax 社区获取教程。
根据文档,在 Cassandra 中,当创建 table 复杂分区键时,在查询 table 时必须同时指定分区键,否则查询将导致错误。
但对我来说,当我仅使用第一个分区键进行查询时它就可以工作。以下是对我有用的示例。
Table 说明:
CREATE TABLE killrvideo.videos5 (
title text,
added_year int,
added_date timestamp,
description text,
user_id uuid,
video_id timeuuid,
PRIMARY KEY (title, added_year)
) WITH CLUSTERING ORDER BY (added_year ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
** 查询:**
cqlsh:killrvideo> select * from videos5 where title='DHANNYA';
结果:
title | added_year | added_date | description | user_id | video_id
---------+------------+---------------------------------+-------------+--------------------------------------+--------------------------------------
DHANNYA | 2018 | 2018-04-23 11:38:12.811000+0000 | Test | 50554d6e-29bb-11e5-b345-feff819cdc9f | ce0de9b1-46ea-11e8-839e-87bbc8b633f5
它应该抛出一个错误,但它没有。我想知道分区键的散列如何仅使用其中一个键来定位数据。
简单的答案:您已将 title 定义为分区键,将 added_year 定义为集群键。这是因为主键中的第一个键始终是分区键,除非您使用括号在分区键中有多个键。因此,在您的示例中,您应该使用以下内容在分区键中包含标题和 added_year:
PRIMARY KEY ((title, added_year))
这在另一个 Whosebug 答案中有进一步解释:https://whosebug.com/a/24953331/1516699