2013-01-22 15 views
6

Here si dice che non è necessario uno sforzo particolare per ottenere una famiglia di colonne dinamiche. Ma ottengo sempre un'eccezione quando cerco di impostare un valore per una colonna non definita.Come definire le famiglie di colonne dinamiche in cassandra

ho creato una famiglia di pilastri come questo:

CREATE TABLE places (
    latitude double, 
    longitude double, 
    name text, 
    tags text, 
    PRIMARY KEY (latitude, longitude, name) 
) 

BTW: ho dovuto definire la colonna tags. Qualcuno può spiegarmi perché? Forse perché tutte le altre colonne fanno parte dell'Indice?

Ora, quando l'inserimento di dati di questo tipo:

INSERT INTO places ("latitude","longitude","name","tags") VALUES (49.797888,9.934771,'Test','foo,bar') 

funziona bene! Ma quando provo:

INSERT INTO places ("latitude","longitude","name","tags","website") VALUES (49.797888,9.934771,'Test','foo,bar','test.de') 

ottengo l'errore seguente:

Bad Request: Unknown identifier website 
text could not be lexed at line 1, char 21 

Quali cambiamenti sono necessari in modo da posso aggiungere dinamicamente le colonne?

Sto usando Cassandra 1.1.9 con CQL3 con cqlsh direttamente su un server.

risposta

11

CQL3 supporta famiglia colonna dinamica, ma si deve modificare lo schema della tabella prima

ALTER TABLE places ADD website varchar; 

Scopri i 1.2 documentation e CQL in depth diapositive

+0

Grazie! Ora ho capito i cambiamenti riguardanti le file larghe! Ma non mi piacciono, ma mi hai aiutato molto. – Balo

+0

Ciao sono confuso, c'è un modo per creare una colonna al volo? – Jisson

7

CQL3 richiede l'esistenza di metadati di colonna. CQL3 è in realtà un'astrazione sulle righe di archiviazione sottostanti, quindi non è un one-to-one. Se si desidera utilizzare nomi di colonne dinamici (e ci sono molti casi d'uso eccellenti per loro), utilizzare l'interfaccia tradizionale di Thrift (tramite la libreria client di propria scelta). Questo ti darà il pieno controllo su ciò che viene memorizzato.

+0

Thrift è molto sconsigliata a favore della CQL, giusto? La migliore pratica corrente è quindi quella di eseguire molte istruzioni ALTER TABLE prima di ogni inserimento? – Mark

+0

Il modo più semplice per farlo è tramite il tipo di dati 'map', che in realtà crea nomi di colonne dinamici sotto il cofano. –

+0

Ecco un ottimo articolo sulla creazione di colonne dinamiche in FQL: http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows –

Problemi correlati