CASSANDRA CQL3:将值设置为整个列

CASSANDRA CQL3 : Set value to entire column

对于我的 Cassandra 数据库,我需要在 table.

中的所有行的列中设置一个值

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

UPDATE table SET column1= XXX;

但在 CQL 中(在 cqlsh 中),它不起作用! 在 9500 行之前,我不想逐行更新。

你有什么建议吗?

谢谢:)

如您所见,CQL != SQL。没有办法在 CQL 中完成您要求的操作,除非遍历 table.

中的每一行

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

aploetz@cqlsh:Whosebug2> UPDATE t SET s='XXX' WHERE k='k';

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

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

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

(2 rows)

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

您可以使用带有 IN 子句的更新查询来代替执行 9500 查询。 首先从您的 table select primary_key 然后将值复制到此查询:

UPDATE table SET column1 = XXX WHERE primary_key IN (p1, p2, p3, ...);

我刚刚在 table(+60000 行)中添加了一个新列,我查看了用某些东西(非空值)初始化该列的所有值的方法,但我一无所获。这里问的不一样,但如果你删除并添加列,我的解决方案将解决它。所以,这就是我所做的:

cqlsh> COPY tablename (primary_key, newcolumn) TO 'FILE.txt'

在记事本++上打开FILE.TXT并按Ctrl+H(替换选项),将所有\r\n替换为'something\r\n'

最后,

cqlsh> COPY tablename (primary_key, newcolumn) FROM 'FILE.txt'

注意 1:如果 primary_key 包含 \r\n.

,您应该小心

注意 2:可能在您的 SO 中,行不以 \r\n 结尾。