对于我的Cassandra数据库,我需要为表中的所有行设置列的值。
我发现在SQL中,我们可以这样做:
我发现在SQL中,我们可以这样做:
UPDATE table SET column1= XXX;
但在CQL(在cqlsh中),它不起作用!我不想逐行更新到9500行。
你有什么建议吗?
谢谢:)
UPDATE table SET column1= XXX;
但在CQL(在cqlsh中),它不起作用!我不想逐行更新到9500行。
你有什么建议吗?
谢谢:)
UPDATE table SET column1 = XXX WHERE primary_key IN (p1, p2, p3, ...);
我刚刚向一个表格中添加了一列(+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:如果您的主键包含\r\n
,请小心处理。
注意2:在您的SO中,行可能不以\r\n
结尾。
cqlsh> COPY tablename (primary_key, newcolumn) TO 'FILE.txt WITH NULL='<null>''
其中“_<null>_”是您的自定义空值。 - Reodont正如你所发现的,CQL != SQL。除了迭代表中的每一行之外,在CQL中没有办法做到你所要求的。
Robert关于重新定义column1
为静态列的建议可能有所帮助。但是静态列与其分区键相关联,因此仍然需要指定:
aploetz@cqlsh:stackoverflow2> UPDATE t SET s='XXX' WHERE k='k';
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)
k
下的所有 CQL 行中,列 s
的值相同。这样你就明白它是如何工作的。