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

与卡桑德拉CQL一起更新

欧阳正卿
2023-03-14

我是卡桑德拉的新手,我正在尝试使用此CQL查询更新表:

UPDATE analytics SET counter = ? WHERE hash = ?;

我使用DataTax PHP驱动程序在PHP中工作,此语句的代码如下:

$statement = $session->prepare("UPDATE analytics SET counter = ? WHERE hash = ?;");
$session->execute($statement, new Cassandra\ExecutionOptions(array('arguments' => array($count, $hash))));

表格:

CREATE TABLE IF NOT EXISTS analytics (domain VARCHAR, page VARCHAR, ip INET, attributes MAP <VARCHAR, VARCHAR>, hash VARCHAR, counter INT, date TIMESTAMP, PRIMARY KEY(hash, domain, date));

当我执行语句时,我得到错误“缺少强制的PRIMARY KEY部分域”,因此我添加了子句ALLOW FILTERING:

UPDATE analytics SET counter = ? WHERE hash = ? ALLOW FILTERING;

但是我得到另一个错误,“第1:48行在'允许'处缺少EOF”。这些查询出了什么问题?

共有3个答案

慕容康安
2023-03-14

您真的希望更新一个散列的所有计数器值而不考虑日期吗?

无论如何,请注意索引。使用索引时,请确保包含分区键,以便您的查询只命中一个分区。否则,您的集群范围的操作可能会在生产中超时。

如果您的数据模型不支持查询,但您需要它进行分析,那么一个不错的选择是使用 Apache Spark,并将其用于批处理类型作业。

武峻熙
2023-03-14

当您想要更新列时,您必须传递所有主键。所以把所有主键放在where子句中。

杨甫
2023-03-14

根据您遇到的错误,我猜您创建了具有复合主键(哈希,域)的表。为了更新cassandra中的记录,您必须提供整个键,即两个值,因此您的查询应如下所示:

更新分析设置计数器=计数器1哪里哈希=?和域=?

如需了解更多信息,请查阅以下网址

它说:在更新和删除语句中,必须限制所有主键列...

 类似资料:
  • 我们运行的cassandra集群有3个节点,复制因子为2。 我们的nodejs服务器是查询这个集群的唯一地方。 是否有其他任何地方的参数设置可能导致不一致的查询? cassandra v2.2.4 nodejs驱动程序v3.0.0 编辑-添加我正在做的事情的示例: 1)检查用户名是否被占用 2)创建用户

  • 我用Spring Data Cassandra 2.2.1开发了一个新的应用程序,想在Cassandra 2.1.9服务器上运行它(旧的,我知道)。但是我们得到了错误 Spring数据卡桑德拉手册声称Spring数据2.2.1至少需要卡桑德拉2.1,所以这应该有效,但它没有。我们包含的唯一特定于卡桑德拉的依赖项是 我怎样才能让这个工作?

  • 我用的是卡珊德拉3.0.11自带的DSE 5.0.5 我正在尝试使用Spring XD 1.3.1连接到Cassandra 我有一个处理数据的处理器模块和一个实际接收数据的接收器。 我试图创建如下流 注入流是名称,摄入转换器是转换数据的模块。我几乎可以肯定它没有问题。 但在“卡桑德拉-3”这一水槽模块中,我面临着一个问题 流创建失败,日志中出现以下错误 2017-02-17T12:45:21 05

  • 我使用的是spring数据cassandra,需要使用jpa映射一个字段,在cassandra中,该字段的类型为

  • 我们一直在使用Spark RDD API(Spark 2.0)来处理在Cassandra.Note中建模的数据,这些数据在Cassandra中建模以实现高效的读写。 然而,现在还有SparkSQLAPI,Spark DataFrame API,它也是一种替代的数据访问方法-http://spark.apache.org/docs/latest/sql-programming-guide.html

  • 我正在尝试使用Cassandra 2.1升级到Spring Data Cassandra 1.5. x的Spring Boot 1.5,但出现启动错误: 未能实例化[org.springframework.data.cassandra.mapping.CassandraMappingContext]:工厂方法“cassandraMapping”引发异常;嵌套异常为java.lang.NoClass