我需要为表添加列,如果该列不存在。
我运行了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
的答案。