2016-05-06 97 views
0

在下面的代碼示例中有一個「地址」類型,插入工作正常。但是,如果我將一個附加屬性添加到映射到new_attribute類型的地址類型(new_attribute),然後插入到user_profiles配置文件中,則會出現與類型映射不兼容的錯誤。 Cassandra相當新穎,所以任何幫助將不勝感激。用戶定義類型可以在Cassandra中引用另一個用戶定義的類型嗎?

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']}]}});* 

回答

1

我不確定你確切的錯誤是什麼,但這是支持的(至少在目前的Cassandra版本中)。我認爲你在該屬性的CQL文字中只有一個錯誤。所有這些嵌套集合都是令人撓心的。這裏是一個工作的文字:

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

你說得對..它似乎有一個CQL錯誤。乾杯! – anm

1

各地名中去除簡單的語錄:「一些價值」

這是非常棘手,但UDT文字是從地圖略有不同文字與CQL:

地圖文字:{'key1': 'value1', 'key2': 'value2'}

UDT文字:{field1: 'value1', field2: 'value2'}

+0

有用的指針 – anm