Подтвердить что ты не робот

Как проверить, существует ли таблица Кассандры

Есть ли простой способ проверить, определена ли таблица (семейство столбцов) в Cassandra с использованием CQL (или API, возможно, с помощью com.datastax.driver)?

Сейчас я склоняюсь к выполнению SELECT 1 FROM table и проверяет исключение, но, может быть, есть лучший способ?

4b9b3361

Ответ 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' Если он существует, вы получите описание таблицы.