2016-05-06 18 views
0

Im folgenden Codebeispiel gibt es einen 'Adresse' Typ und die Einfügung funktioniert gut. Wenn ich jedoch ein zusätzliches Attribut zum Adresstyp hinzufüge (neues_Attribut), das einem neuen_Attribut Typ zuordnet und dann in die user_profiles-Profile einfüge, erhalte ich einen Fehler, der nicht mit type map kompatibel ist. Ziemlich neu für Cassandra, also würde jede Hilfe geschätzt werden.Kann ein benutzerdefinierter Typ in Cassandra auf einen anderen benutzerdefinierten Typ verweisen?

CREATE TYPE new_attribute (
     name text, 
     *map_l list<text>* 
); 


CREATE TYPE address (
     street text, 
     city text, 
     zip int, 
     *new_attribute map<text, FROZEN<list<new_attribute>>>* 
); 

    CREATE TABLE user_profiles (
     login text PRIMARY KEY, 
     first_name text, 
     last_name text, 
     email text, 
     addresses map<text, frozen<address>> 
); 

    // Inserts a user with a home address 
    INSERT INTO user_profiles(login, first_name, last_name, email, addresses) 
    VALUES ('tsmith', 
      'Tom', 
      'Smith', 
      '[email protected]', 
      { 'home': { street: '1021 West 4th St. #202', 
         city: 'San Fransisco', 
         zip: 94110 , 
         *new_attribute: [{'name': 'some value', 
             map_l: ['list', 'of', 'text']}]}});* 

Antwort

1

Ich bin mir nicht sicher, was genau Ihr Fehler ist, aber das wird unterstützt (zumindest in aktuellen Versionen von Cassandra). Ich denke, Sie haben nur einen Fehler im CQL-Literal dieses Attributs. Alle diese verschachtelten Sammlungen sind überwältigend. Hier ist ein funktionierendes wörtlichen:

INSERT INTO user_profiles(login, first_name, last_name, email, addresses) 
    VALUES ('tsmith', 
      'Tom', 
      'Smith', 
      '[email protected]', 
      {'home': {street: '1021 West 4th St. #202', 
        city: 'San Fransisco', 
        zip: 94110 , 
        new_attribute: {'key': [{name: 'some value', 
              map_l: ['list', 'of', 'text']}]}}}); 
+0

Du hast recht .. es scheint Es gab einen CQL-Fehler. Prost! – anm

1

Entfernen Sie die einfachen Anführungszeichen um Name: ‚some value‘

Das ist sehr schwierig, aber UDT wörtlichen unterscheidet sich geringfügig von der Karte wörtlichen mit CQL:

Karte wörtliche: {'key1': 'value1', 'key2': 'value2'}

UDT wörtliche: {field1: 'value1', field2: 'value2'}

+0

hilfreicher Zeiger – anm