Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Cassandra CQL更新_Php_Cassandra_Cql_Cassandra 2.0 - Fatal编程技术网

Php 使用Cassandra CQL更新

Php 使用Cassandra CQL更新,php,cassandra,cql,cassandra-2.0,Php,Cassandra,Cql,Cassandra 2.0,我是Cassandra的新手,正在尝试使用以下CQL查询更新表: UPDATE analytics SET counter = ? WHERE hash = ?; 我使用DataStax PHP驱动程序在PHP中工作,此语句的代码如下: $statement = $session->prepare("UPDATE analytics SET counter = ? WHERE hash = ?;"); $session->execute($statement, new Cassan

我是Cassandra的新手,正在尝试使用以下CQL查询更新表:

UPDATE analytics SET counter = ? WHERE hash = ?;
我使用DataStax 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));
但我得到了另一个错误,“第1:48行在'ALLOW'处缺少EOF”。
这些查询出了什么问题?

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

更新分析集计数器=计数器+1,其中哈希=?和域=

有关更多信息,请查看此


它说:在UPDATE和DELETE语句中,所有主键列都必须被限制…

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

更新分析集计数器=计数器+1,其中哈希=?和域=

有关更多信息,请查看此


它说:在UPDATE和DELETE语句中,必须限制所有主键列。

要更新列,必须传递所有主键。所以,将所有主键放在where子句中。

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

您真的希望更新哈希的所有计数器值而不考虑日期吗

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


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

您真的希望更新哈希的所有计数器值而不考虑日期吗

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


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

我现在尝试过它,但它说:“缺少必需的主键部分日期”,所以我想我还必须添加日期键,使用ALLOW FILTERING无法做到这一点?无法在查询和中更新计数器字段,因为它是INT字段而不是计数器。否。必须限制主键中的每一列。所以,如果您使用主键(散列、域、日期)创建了表,那么您必须对其中的每一项进行限制,或者您可以创建不将日期作为主键一部分的表,如果这样做对您有效的话。也许你可以添加日期作为索引。对于计数器字段,如果它是int,您可以按照您的建议进行更新。我在WHERE子句中使用SELECT语句的日期键,将日期更改为索引,我可以在SELECT中的WHERE子句中使用它,或者使用ORDER BY?是。您应该能够在where或order by中的select查询中使用它。我建议您尝试创建一个测试表,并对其执行所有计划执行的查询。我执行了一个简单的SELECT查询,但在我编写的WHERE部分
domain=?和date>“(time()-3600)。”“现在表中的ORDER BY date DESC
日期不再是主键,而是索引。我现在尝试过,但它说:“缺少必需的主键部分日期”,所以我认为我还必须添加日期键,使用ALLOW筛选无法做到这一点?无法在查询和中更新计数器字段,因为它是INT字段而不是计数器。否。必须限制主键中的每一列。所以,如果您使用主键(散列、域、日期)创建了表,那么您必须对其中的每一项进行限制,或者您可以创建不将日期作为主键一部分的表,如果这样做对您有效的话。也许你可以添加日期作为索引。对于计数器字段,如果它是int,您可以按照您的建议进行更新。我在WHERE子句中使用SELECT语句的日期键,将日期更改为索引,我可以在SELECT中的WHERE子句中使用它,或者使用ORDER BY?是。您应该能够在where或order by中的select查询中使用它。我建议您尝试创建一个测试表,并对其执行所有计划执行的查询。我执行了一个简单的SELECT查询,但在我编写的WHERE部分
domain=?和date>“(time()-3600)。”表中的orderbydatedesc
“现在日期不再是主键,而是索引
UPDATE analytics SET counter = ? WHERE hash = ? ALLOW FILTERING;