问题描述
如果我有两个表结构,其中一个具有: 设为A
PRIMARY KEY (measureid,statename,reportyear,countyname)
与另一个(让它成为B):
PRIMARY KEY ((measureid,reportyear),countyname)
表结构B对A的查询限制是什么? 在哪些查询中具有复合分区键会带来问题?
解决方法
在表A中,其中:
PRIMARY KEY (measureid,statename,reportyear,countyname)
您可以仅使用measureid
查询表,它将返回statename
的行。具体来说:
SELECT FROM ... WHERE measureid = ?
或者,您也可以使用以下查询:
SELECT FROM ... WHERE measureid = ? AND statename = ?
SELECT FROM ... WHERE measureid = ? AND statename = ? AND reportyear = ?
SELECT FROM ... WHERE measureid = ? AND statename = ? AND reportyear = ? AND countyname = ?
在表B中,其中:
PRIMARY KEY ((measureid,reportyear),countyname)
您必须指定所有measureid
,statename
,reportyear
才能查询数据。这将返回一个分区的所有行:
SELECT FROM ... WHERE measureid = ? AND statename = ? AND reportyear = ?
要检索一个分区的一个特定行:
SELECT FROM ... WHERE measureid = ? AND statename = ? AND reportyear = ? AND countyname = ?
为清楚起见,您不能 使用以下查询表B:
SELECT FROM ... WHERE measureid = ?
SELECT FROM ... WHERE measureid = ? AND statename = ?
因为您必须指定分区键的3列。我在这篇帖子https://community.datastax.com/questions/7866/中解释了原因。干杯!