它在 cql/cassandra 中是否有等效的查询"alter table add column if column not exists"?



我需要为表添加列,如果该列不存在。

我运行了Alter Table <table> add <column_name> <type>;,但是,如果列已经存在,它会有这个错误消息。

InvalidRequest: Error from server: code=2200 [Invalid query] message="Invalid column name <column_name> because it conflicts with an existing column"

是否有类似的检查列是否存在的方法?

谢谢

所以我检查了Tasos的答案,它适用于Apache Cassandra 4.1。它使用4.0或之前的任何版本。

如果您使用的是旧版本,您可以尝试像这样查询system_schema:

SELECT COUNT(*) FROm system_schema.columns
WHERE keyspace_name = 'nosql1' AND table_name = 'users' AND column_name='description';

如果你试图做一些编程,你可以检查查询是否返回0或1,然后应用ALTER TABLE命令。

根据Cassandra 4.1的官方文档,您可以使用IF NOT EXISTS子句,即:

ALTER TABLE addamsFamily ADD IF NOT EXISTS gravesite varchar;

我引用(强调我的):

ALTER TABLE语句可以:

向表中添加一个新列。表的主键永远不能更改。因此,新列不能成为主键的一部分。添加列是一个基于表中数据量的恒定时间操作。如果新列已经存在,语句将返回错误,除非使用If NOT exists在这种情况下,该操作为无操作。

[…]

对于4.1之前的版本,您需要使用Aaron基于system_schema的答案。

相关内容

  • 没有找到相关文章

最新更新