2012-03-11 6 views
9

Muszę sprawdzić, czy w bazie danych Cassandra znajduje się określony klucz. Muszę napisać smth tak:CQL: jak sprawdzić, czy keyspace istnieje?

if (keyspace KEYSPACE_NAME not exists) create keyspace KEYSPACE_NAME; 

istnieje komenda opisać KEYSPACE, ale mogę jakoś odzyskać z niego informacji w skrypcie CQI?

Odpowiedz

8

Od tego momentu cql grammar nie zapewnia create keyspace if not exists. Prawdopodobnie w przyszłości dodadzą tę funkcję. Ten zbliży się do tego, będzie to improvement, może dodadzą do utworzenia keyspace też. wzrusza ramionami

Prawdopodobnie można zrobić coś podobnego za pomocą CQL w python lub w dowolnym klientów Cassandra. Mam proste tworzenie keyspace, jeśli nie istnieje napisane w 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

Należy zauważyć, że z tego co mi wiadomo, '*' opisać funkcją jest raczej powolne. Mam nadzieję, że nie będziesz musiał tego zbyt często używać. –

+0

odpowiedź została udzielona w 2012 roku ... chyba, że ​​w tym momencie, gdy nadal piszesz, wciąż używasz starożytnego cassandra, powinieneś naprawdę przeczytać aktualną dokumentację. – Jasonw

9

Według: https://issues.apache.org/jira/browse/CASSANDRA-2477, jak Cassandra 1.1, można teraz zrobić:

USE system; 
SELECT * FROM schema_keyspaces; 
+0

Przykro mi, właśnie przez pomyłkę kliknąłem opcję "zaakceptuj edycję". Nie dodawaj treści, które zmieniają kontekst pytań na zmiany. System 'USE;' w sugerowanej edycji jest jednym z takich przykładów. –

+0

Problem polega na tym, że tabele systemowe mają tendencję do zmiany (szybko) w miarę upływu czasu. Może to być koszmar dla wsparcia takiego kodu, zwłaszcza jeśli musisz mieć starszą obsługę dla różnych użytkowników. W CQL 3.x informacja jest teraz w keyspace o nazwie 'system_schema' ... –

34

Wystarczy zapewniając świeże informacje. Począwszy od CQL3 podczas tworzenia KEYSPACE można dodać if jak ten

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