2016-10-10 2 views
0

Ich habe einen benutzerdefinierten Cassandra Typen und eine Tabelle definiert, z:Phantom DSL und Cassandra benutzerdefinierter Spalt Typ

CREATE TYPE my.usertype (
    id text, 
    firstname text, 
    lastname text 
); 


CREATE TABLE mytable (
    user frozen <usertype>, 
    ..., 
    PRIMARY KEY(user) 
); 

Wie kann ich diesen Benutzertyp in der Cassandra Tabellendefinition in Scala definieren?

class MyTable extends CassandraTable[X, Y] { 
    object user extends UserColumn(this) with PartitionKey[User] 
         ^^^^^???       ^^^??? 

Wie kann ich eine benutzerdefinierte UserColumn für die UserType implementieren? Ich habe den Phantom-Code für die Spaltenimplementierungen überprüft, aber jedes Beispiel und/oder jede Erklärung wäre großartig.

Antwort

1

In Phantom nur Pro, das verfügbar sein wird in 2 Wochen Zeit abonnieren:

@Udt case class User(
    id: String, 
    firstname: String, 
    lastname: String 
) 

Und dann verwenden Sie UDTColumn :

class MyTable extends CassandraTable[MyTable , Y] { 
    object user extends UDTColumn[MyTable, Y, User](this) with PartitionKey[User] 
} 

Dies wird Ihnen automatisierte Schema-Generierung und was auch immer el einschließlich automatisierter Initialisierung Ihres UDT.

1

So nach Autoren der Bibliothek, benutzerdefinierte Typen in der Open-Source-Edition von Phantom nicht unterstützt werden: https://github.com/outworkers/phantom/issues/496

aber Sie in der Lage sein können, teilweise, dass zu überwinden, indem MapColumn erstreckt, wie es hier beschrieben wird: Phantom-DSL cassandra with frozen type. Natürlich ist das nicht perfekt, z.B. Sie können CQL nicht für die Erstellung von Schemas generieren und Sie müssen einige manuelle Verrohrungen durchführen.

So mehr oder weniger, die so wie könnte:

class MyTable extends CassandraTable[MyTable , Y] { 
    object user extends MapColumn[MyTable , Y, String, String](this) with PartitionKey[MapColumn...] 
+0

Vielen Dank für den Hinweis auf die PR! – Bruckwald

Verwandte Themen