由于 cassandra 中的复合分区键导致的查询限制?
Query limitations due to composite partition keys in cassandra?
如果我有两个 table 结构,其中一个具有:
设这是 A,
PRIMARY KEY (measureid, statename, reportyear, countyname)
还有一个,(假设为 B):
PRIMARY KEY ((measureid, statename, reportyear), countyname)
table 结构 B 在 A 上的查询限制是什么?
在哪些具有复合分区键的查询中会出现问题?
在tableA中:
PRIMARY KEY (measureid, statename, reportyear, countyname)
您可以仅使用 measureid
查询 table,它将 return 行 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 = ?
在 table B 中:
PRIMARY KEY ((measureid, statename, reportyear), countyname)
必须指定全部measureid
、statename
、reportyear
才能查询数据。这将 return 一个分区的所有行 :
SELECT FROM ... WHERE measureid = ? AND statename = ? AND reportyear = ?
要检索一个分区的一个特定行:
SELECT FROM ... WHERE measureid = ? AND statename = ? AND reportyear = ? AND countyname = ?
需要说明的是,您不能使用以下内容查询table B:
SELECT FROM ... WHERE measureid = ?
SELECT FROM ... WHERE measureid = ? AND statename = ?
因为您必须指定分区键的 3 列。我已经在 post https://community.datastax.com/questions/7866/ 中解释了原因。干杯!
如果我有两个 table 结构,其中一个具有: 设这是 A,
PRIMARY KEY (measureid, statename, reportyear, countyname)
还有一个,(假设为 B):
PRIMARY KEY ((measureid, statename, reportyear), countyname)
table 结构 B 在 A 上的查询限制是什么? 在哪些具有复合分区键的查询中会出现问题?
在tableA中:
PRIMARY KEY (measureid, statename, reportyear, countyname)
您可以仅使用 measureid
查询 table,它将 return 行 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 = ?
在 table B 中:
PRIMARY KEY ((measureid, statename, reportyear), countyname)
必须指定全部measureid
、statename
、reportyear
才能查询数据。这将 return 一个分区的所有行 :
SELECT FROM ... WHERE measureid = ? AND statename = ? AND reportyear = ?
要检索一个分区的一个特定行:
SELECT FROM ... WHERE measureid = ? AND statename = ? AND reportyear = ? AND countyname = ?
需要说明的是,您不能使用以下内容查询table B:
SELECT FROM ... WHERE measureid = ?
SELECT FROM ... WHERE measureid = ? AND statename = ?
因为您必须指定分区键的 3 列。我已经在 post https://community.datastax.com/questions/7866/ 中解释了原因。干杯!