CASSANDRA CQL3:将值设置为整列

Que*_*OIS 5 database cql cassandra cql3 cqlsh

对于我的Cassandra数据库,我需要在列中为表中的所有行设置一个值.

我在SQL中看到,我们可以做到:

UPDATE table SET column1= XXX;
Run Code Online (Sandbox Code Playgroud)

但在CQL(在cqlsh中),它不起作用!我不希望逐行更新,直到9500行.

你有什么建议吗?

谢谢 :)

小智 5

您可以使用带有 IN 子句的更新查询,而不是执行 9500 查询。首先从表中选择 primary_key ,然后将值复制到此查询:

UPDATE table SET column1 = XXX WHERE primary_key IN (p1, p2, p3, ...);
Run Code Online (Sandbox Code Playgroud)


Aar*_*ron 0

正如您所发现的,CQL!= SQL。除了迭代表中的每一行之外,无法执行您在 CQL 中要求的操作。

罗伯特关于重新定义column1静态列的建议可能会有所帮助。但静态列与其分区键相关联,因此您仍然需要指定:

aploetz@cqlsh:stackoverflow2> UPDATE t SET s='XXX' WHERE k='k';
Run Code Online (Sandbox Code Playgroud)

另外,听起来您只想能够为所有行设置列值。如果您希望分区内的 CQL 行的列值不同(来自 DataStax 文档中的示例),静态列将不适合您:

aploetz@cqlsh:stackoverflow2> INSERT INTO t (k, s, i) VALUES ('k', 'I''m shared', 0);
aploetz@cqlsh:stackoverflow2> INSERT INTO t (k, s, i) VALUES ('k', 'I''m still shared', 1);
aploetz@cqlsh:stackoverflow2> SELECT * FROM t;

 k | i | s
---+---+------------------
 k | 0 | I'm still shared
 k | 1 | I'm still shared

(2 rows)
Run Code Online (Sandbox Code Playgroud)

请注意,分区键下的所有 CQL 行中的列值s都是相同的k。只是为了让您了解它是如何工作的。