Ich versuche, einige Zeitreihendaten in Cassandra zu modellieren, die ich mit dem älteren Sparsamkeitsklienten machen konnte, aber CQL scheint mich zu werfen.CAS mit CQL in Cassandra
Ich möchte eine neue Spalte meiner Zeile hinzufügen, wenn ein bestimmter Spaltenwert übereinstimmt.
Meine Tabellendefinition ist:
CREATE TABLE TestTable (
key int,
base uuid,
ts int, // Timestamp (column name)
val text, // Timestamp value (column value)
PRIMARY KEY (key, ts)
) WITH CLUSTERING ORDER BY (ts DESC);
Was ich vermute, es ist wie aussehen würde:
Row | UUID | TS | TS | TS
--- | ---- | --- | ---| ---
1 | id1 | 1 | 2 | 3
--- | --- | --- | ---| ---
2 | id2 | 1 | 5 | 6
im Wesentlichen Also, ich ein paar Zeitstempel für eine bestimmte Zeile haben kann und eine EINZIGE UUID für eine Zeile. Die UUID muss für jede neue Einfügung einer TS-Spalte aktualisiert werden.
fügt also in einer Reihe gut funktionieren:
insert into TestTable(key, base, ts, val) values (1, dfb63886-91a4-11e6-ae22-56b6b6499611, 50, 'one')
Aber ich versagt, einen Weg, um herauszufinden, mit CQL, eine neue Spalte in einer Reihe Transaktionen mit Cassandra INSERT (CAS).
Dieses versagt:
insert into TestTable(key, base, ts, val) values (1, dfb63886-91a4-11e6-ae22-56b6b6499611, 70, 'four') if base = dfb63886-91a4-11e6-ae22-56b6b6499611;
mit dem Fehler:
SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query] message="line 1:106 mismatched input 'base' expecting K_NOT (..., 70, 'four') if [base] =...)">
und die Abfrage:
update TestTable set val = 'four', ts=70 where key = 1 if base = dfb63886-91a4-11e6-ae22-56b6b6499611;
schlägt mit dem Fehler:
InvalidRequest: code=2200 [Invalid query] message="PRIMARY KEY part ts found in SET part"
Ich versuche herauszufinden, wie man die Daten richtig modelliert, so dass ich nur eine UUID pro Zeile habe und mehrere Spalten haben kann, ohne sie bei der Tabellenerstellung explizit definieren zu müssen, da sie ziemlich variieren kann.
IIRC, war es einfach, dies zu tun mit dem Secondhand-Client aber mit, dass keine Option =/
Also gibt es keine Möglichkeit in CQL beliebige Spalten hinzuzufügen und CAS zu verwenden? –
Ja, es ist möglich, dynamische Spalten zu einer Zeile hinzuzufügen, die Erklärung ist [hier] (http: //www.datastax.com/dev/blog/does-cql-support-dynamische-columns-wide-rows) –
Die Art, wie die Tabelle derzeit eingerichtet wird, fügt dynamische Spalten hinzu. –