2012-03-11 24 views
9

Necesito comprobar si existe cierto espacio de claves en la base de datos de Cassandra. Tengo que escribir algo bajo la siguiente manera:CQL: ¿cómo verificar si el espacio de claves existe?

if (keyspace KEYSPACE_NAME not exists) create keyspace KEYSPACE_NAME; 

hay un comando describen espacio de claves, pero ¿hay algún modo de recuperar información de él en escritura CQL?

Respuesta

8

A partir de este momento, cql grammar no proporciona create keyspace if not exists. Probablemente en el futuro, agregarán esta característica. El que se acerque a esto, sería este improvement, tal vez se agregarán para crear espacio de claves también. encoge de hombros

Probablemente pueda hacer algo similar con CQL en python o en cualquier cliente de Cassandra. Tengo un espacio de claves de creación simple si no existe escrito en 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) 
{ 
} 
+0

Tenga en cuenta que por lo que sé, un '' describir * función es más bien lento. Es de esperar que no tenga que usar esto con demasiada frecuencia. –

+0

esto fue respondido en el año 2012 ... a menos que en este punto de tiempo al momento de escribir esto, todavía estés usando cassandra antigua, realmente deberías leer la documentación actual. – Jasonw

9

De acuerdo con: https://issues.apache.org/jira/browse/CASSANDRA-2477, a partir de Cassandra 1.1, ahora se puede hacer:

USE system; 
SELECT * FROM schema_keyspaces; 
+0

Lo siento, acabo de hacer clic en 'accept edit' por error. No agregue cosas que cambien el contexto de las preguntas a las ediciones. El 'USE system;' en la edición sugerida es uno de esos ejemplos. –

+0

El problema es que las tablas del sistema tienden a cambiar (rápidamente) con el tiempo. Puede ser una pesadilla admitir dicho código, especialmente si debe contar con soporte heredado para varios usuarios. En CQL 3.x, la información está ahora en un espacio de claves llamado 'system_schema' ... –

34

limitarse a proporcionar información fresca. A partir de CQL3 mientras se crea un espacio de claves se puede añadir si esta declaración como

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