20

如何在 cassandra 中编写子查询/嵌套查询。是否在 CQL 中提供了此功能?

我试过的例子:

cqlsh:testdb> select itemname from item where itemid = (select itemid from orders where customerid=1);

它只是抛出以下错误 -

Bad Request: line 1:87 no viable alternative at input ';'
4

1 回答 1

30

由于其分布式特性,Cassandra 不支持 RDBMS 样式连接。当您想要加入之类的东西时,您有几个选择。

一种选择是执行单独的查询,然后让您的应用程序加入数据本身。如果数据相对较小并且您只需执行少量查询,这是有道理的。根据您上面给出的示例,这对您来说可能是一个很好的解决方案。

对于更复杂的连接,通常的策略是对数据进行非规范化并存储连接的物化视图。这样做的好处是,获取这些数据将比每次需要时都在应用程序中构建它要快得多。现在的代价是您在多个地方存储相同的数据,并且您需要保持所有数据同步。您可以在新数据进入系统时更新所有视图,也可以定期进行批处理作业来重建它们。

您可能会发现这篇文章很有用:您真的需要 SQL 在 Cassandra 中完成所有工作吗?它有点旧,但它的原则仍然适用。

于 2013-06-02T17:18:29.727 回答