2016-05-06 10 views
0

次のコードサンプルでは、​​「アドレス」タイプがあり、挿入が正常に機能します。しかし、アドレスタイプ(new_attribute)に追加の属性を追加してnew_attributeタイプにマッピングし、user_profilesプロファイルに挿入すると、タイプマップと互換性のないエラーが発生します。カサンドラには全く新しいので、どんな助けもありがとう。ユーザ定義型は、カサンドラで別のユーザ定義型を参照できますか?

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

関連する問題