CQL: как проверить, существует ли пространство ключей?

Мне нужно проверить, существует ли определенное пространство ключей в базе данных Cassandra. Мне нужно написать smth так:

if (keyspace KEYSPACE_NAME not exists) create keyspace KEYSPACE_NAME;

есть команда описать пространство ключей, но могу ли я каким-то образом получить информацию из него в скрипте cql?

3 ответов


в настоящий момент грамматика cql не дает create keyspace if not exists. Вероятно, в будущем они добавят эту функцию. Тот, кто приблизится к этому, будет этим улучшение, возможно, они добавят для создания keyspace тоже. пожимает

вы, вероятно, можете сделать что-то подобное, используя CQL в python или в любых клиентах Cassandra. У меня есть простой create keyspace, если он не существует, написанный на java.

try
{
    if (cluster.describeKeyspace("new_keyspace") == null)
    {
        System.out.println("create new keyspace");
        KeyspaceDefinition ksdef = HFactory.createKeyspaceDefinition("new_keyspace");
        cluster.addKeyspace(ksdef);
    }
    else
    {
        System.out.println("keyspace exists");
    }
}
catch (HectorException e)
{   
}

просто предоставление свежей информации. По состоянию на CQL3 при создании пространства ключей вы можете добавить оператор if, подобный этому

CREATE KEYSPACE IF NOT EXISTS Test
    WITH replication = {'class': 'SimpleStrategy',
                        'replication_factor' : 3}

согласно:https://issues.apache.org/jira/browse/CASSANDRA-2477, как Кассандра 1.1, теперь вы можете сделать:

USE system;
SELECT * FROM schema_keyspaces;