我在Cassandra有两个表,第一个是"公司",其中列是" company_name(字符串)和company_id(int)"第二个是" data",其中列是" company_id(int),worker(字符串)和status(布尔值)"。
我需要从Data中选择所有worker及其状态,其中company_id = 1,但我必须使用company_name获取company_id,所以我执行第一个查询以从第一个表获取company_id(从中选择company_id)公司,其中compani_name = name1')并且我得到1作为查询结果,例如,之后我将该查询的结果用于另一个查询以获得" worker"和"状态"来自数据表(从company_id = 1的数据中选择worker)和(从company_id = 1的数据中选择状态)。
所以,我想知道,有没有办法在Cassandra的一行中执行这两个查询?
谢谢
答案 0 :(得分:1)
正如您对问题的评论所指出的,使用您现有的数据模型,您实际上是在询问如何进行连接。然而,Cassandra不支持连接,并且由于它的设计和实现选择,它在可预见的将来不会(可能永远)。
与首先设计表的关系数据库不同,然后编写查询,在Cassandra中最好定义查询,然后创建可以支持这些查询的表。这意味着您可能有几个重复数据的非规范化表,但Cassandra的设计理念是磁盘价格便宜。
如果您想继续使用现有的表,您可能希望使用Spark Cassandra Connector查看Apache Spark,它提供了一个用于在Cassandra表上进行连接的计算框架。
您可以创建一个新的非规范化表,而不是使用Spark:
CREATE TABLE workers_by_company_name (
company_name text PRIMARY KEY,
company_id int,
worker text,
status boolean
)
然后,您可以使用SELECT * FROM workers_by_company_name WHERE company_name = 'your_company';
如果您要保留另外两个表,那么每当添加或更改此数据时,您都希望使用3个插入语句(每个表一个)执行原子批处理。
数据建模的附加阅读:http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling