当前位置: 首页 > 知识库问答 >
问题:

这个卡珊德拉准备的声明电话怎么回事

闾丘树
2023-03-14

我正在为python使用datastax cassandra驱动程序。

有争议的代码部分是:

cql = "SELECT * FROM iptools.geo2ip WHERE geo_key = ? AND (( geohash >= ? AND geohash < ? ) OR ( geohash >= ? AND geohash < ? ));"
print cql
prepared = self.session.prepare(cql)

结果是:

SELECT * FROM iptools.geo2ip WHERE geo_key = ? AND (( geohash >= ? AND geohash < ? ) OR ( geohash >= ? AND geohash < ? ));
cassandra.protocol.SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query] message="line 1:82 missing EOF at ')' (...? AND geohash < ? [)];)">

我不确定括号周围的括号来自哪里,一旦我删除了括号,prepare 语句就会起作用。

想法?

共有1个答案

宗政法
2023-03-14

我很确定正在发生这种情况,因为CQL不包含OR关键字的定义。用于代替OR的一个快捷方式是IN

SELECT * FROM geo2ip WHERE geo_key IN (?,?);

虽然预先警告IN是众所周知的表现不是很好。但是,我认为这无论如何都不会对您有太大帮助,因为看起来您希望能够在geohash上进行范围查询。根据您的主键定义(例如,将geo_key作为分区键,将 geohash 作为聚类键),此操作(减去复杂的OR' 逻辑)仍应有效:

SELECT * FROM iptools.geo2ip WHERE geo_key = ? AND geohash >= ? AND geohash < ?;
 类似资料:
  • 引用这篇文章: http://www.datastax.com/dev/blog/4-simple-rules-when-using-the-datastax-drivers-for-cassandra Cassandra的存储引擎进行了优化,以避免存储不必要的空列,但是当使用预准备语句时,那些未提供的参数会导致空值被传递给Cassandra(从而存储墓碑)。目前,这种情况的唯一解决方法是为最常见

  • 请看下面的代码,让我知道我哪里做错了? 使用: DSE版本-5.1.0 172.31.16.45:9042连接到测试群集。[cqlsh 5.0.1|Cassandra3.10.0.1652|DSE 5.1.0|CQL规范3.4.4|本地协议v4]使用HELP寻求帮助。 谢谢 斯卡拉 斯卡拉 斯卡拉 我在这里什么都得不到?甚至没有错误。

  • 我正在使用Cassandra作为我的一个应用程序。我想使用Cassandra通过cql提供的Prepared语句。如果我准备了一个查询,这是否在所有节点中都准备好了?。 任何帮助是值得赞赏的。

  • 我们对DataStax Cassandra的查询使用缓存的准备声明。但是,如果我们需要向表中添加新列,我们需要重新启动应用程序服务器以重新缓存准备好的语句。 我在卡珊德拉遇到了这个错误,这解释了https://datastax-oss.atlassian.net/browse/JAVA-420的解决方案 它基本上提供了一种解决方法,在查询中不使用“SELECT*FROM table”,而是使用“s

  • 最近,我们对一些Cassandra集群进行了压力测试,比较了一致性级别、准备好的/未准备好的语句和同步/异步执行模式的所有组合的性能,在每种配置中,最高的性能总是异步运行的(任何/一个)未准备好的语句的组合!! 对于有意义的位,任何/一个一致性级别的限制都较少,因此应该是最快的。此外,异步运行查询,因此利用并行计算应该比按顺序运行它们更快,但是准备好的语句和非准备好的语句呢? 我们总是读到和听到(

  • DSE版本4.8.2 我用数据向集群添加了6个新节点,并将bootstrap:false。他们加入后,我正在对每一个进行重建。我相信1NODE已完成,但控制台上的命令仍在“运行”(例如,我还无法运行另一个命令)。我想确保它完全完成。该单元没有压实,也没有活动的溪流。更新:现在已经4天了,仍然处于命令提示符下。 除了compationstats和netstats,还有什么我可能缺少的吗?我看到它流式