Как проверить, существует ли таблица Кассандры
Есть ли простой способ проверить, определена ли таблица (семейство столбцов) в Cassandra с использованием CQL (или API, возможно, с помощью com.datastax.driver)?
Сейчас я склоняюсь к выполнению SELECT 1 FROM table
и проверяет исключение, но, может быть, есть лучший способ?
Ответы
Ответ 1
Начиная с версии 1.1, вы должны иметь возможность запрашивать в семействе столбцов system
, schema_columnfamilies
. Если вы знаете, какое пространство ключей вы хотите проверить, этот CQL должен отображать все семейства столбцов в пространстве ключей:
SELECT columnfamily_name
FROM schema_columnfamilies WHERE keyspace_name='myKeyspaceName';
Отчет, описывающий эту функциональность, представлен здесь: https://issues.apache.org/jira/browse/CASSANDRA-2477
Хотя, они отмечают, что некоторые имена столбцов системы изменились между 1.1 и 1.2. Поэтому вам, возможно, придется немного потрудиться, чтобы получить желаемые результаты.
Изменить 20160523 - Обновление Cassandra 3.x:
Обратите внимание, что для Cassandra 3.0 и выше вам нужно внести несколько изменений в указанный выше запрос:
SELECT table_name
FROM system_schema.tables WHERE keyspace_name='myKeyspaceName';
Ответ 2
Драйвер Java (так как вы упомянули его в своем вопросе) также поддерживает локальное представление схемы:
KeyspaceMetadata ks = cluster.getMetadata().getKeyspace("myKeyspace");
TableMetadata table = ks.getTable("myTable");
Метаданные таблицы будут пустыми, если таблица не существует.
Ответ 3
Мне просто нужно было вручную проверить наличие таблицы с помощью cqlsh.
Возможно полезная общая информация.
describe keyspace_name.table_name
Если этого не существует, вы получите 'table_name', не найденный в keypace 'keyspace'
Если он существует, вы получите описание таблицы.