My best guess it that you need to remove the quotes from around the zip
values (ie change if to  zip: 20500 rather than zip: ‘20500’ ) as zip is
defined as an int.

Cheers
Ben

On Wed, 28 Sep 2016 at 14:38 zha...@easemob.com <zha...@easemob.com> wrote:

> Hi, Ben Slater, thank you very much for your replay!
>
> my cassandra version is 3.7, so I think there must be some thing  I
> misunderstand  ahout frozen type. I add a comma between } and ‘work’, the
> result is like below. Is there some special form  about " type frozen"?
>
>
> cqlsh:counterks> INSERT INTO user (name, addresses) VALUES ('z3 Pr3z1den7', 
> {'home' : {street: '1600 Pennsylvania Ave NW',city: 'Washington',zip: 
> '20500',phones: { 'cell' : { country_code: 1, number: '202 456-1111' 
> },'landline' : { country_code: 1, number: '...' } }},'work' : {street: '1600 
> Pennsylvania Ave NW',city: 'Washington',zip: '20500',phones: { 'fax' : { 
> country_code: 1, number: '...' } }}});
>
> InvalidRequest: code=2200 [Invalid query] message="Invalid map literal for 
> addresses: value {city: 'Washington', zip: '20500', street: '1600 
> Pennsylvania Ave NW', phones: {'cell': {number: '202 456-1111', country_code: 
> 1}, 'landline': {number: '...', country_code: 1}}} is not of type 
> frozen<address>"
>
>
> my create statements about table and type are:
>
>
> cqlsh:counterks> CREATE TYPE phone (     country_code int,     number text, );
>
> cqlsh:counterks> CREATE TYPE address (     street text,     city text,     
> zip int,     phones map<text, frozen<phone>> );
> cqlsh:counterks> CREATE TABLE user (
>              ...     name text PRIMARY KEY,
>              ...     addresses map<text, frozen<address>>
>              ... );
>
>
>
> ------------------------------
> zha...@easemob.com
>
>
> *From:* Ben Slater <ben.sla...@instaclustr.com>
> *Date:* 2016-09-28 11:29
> *To:* user <user@cassandra.apache.org>
> *Subject:* Re: ask for help about exmples of Data Types the document shows
>
> Hi,
>
> I think you are right about the typo in (1). For (2), I think you’re
> missing a comma between } and ‘work’ so the JSON is invalid.
>
> I think reading this JIRA
> https://issues.apache.org/jira/browse/CASSANDRA-7423 that the change
> requiring  a UDT as part of a collection to be explicitly marked as frozen
> is relatively recent (3.6) so the doco may be out date there.
>
> Cheers
> Ben
>
> On Wed, 28 Sep 2016 at 13:12 zha...@easemob.com <zha...@easemob.com>
> wrote:
>
>> hi, everyone, I'm learning Cassandra now , and have some problems about
>> the document of "Data Types" .  I don't know where to report or ask for
>> help, so I'm very sorry if this mail bother you.
>>
>> In the chapter The Cassandra Query Language (CQL)/Data Types (
>> http://cassandra.apache.org/doc/latest/cql/types.html), I'm confused
>> with two examples the document showing below. My enviroment is:
>>
>> CentOS release 6.8 (Final)
>>
>> java version "1.8.0_91"
>> Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
>> Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
>>
>> Python 2.7.11
>>
>> Cassandra version: 3.7
>> CQL version:
>> [cqlsh 5.0.1 | Cassandra 3.7 | CQL spec 3.4.2 | Native protocol v4]
>>
>>
>> 1、 in http://cassandra.apache.org/doc/latest/cql/types.html, when
>> describing type set, the giving example is:
>>
>> CREATE TABLE images (
>>     name text PRIMARY KEY,
>>     owner text,
>>     tags set<text> // A set of text values);INSERT INTO images (name, owner, 
>> tags)
>>             VALUES ('cat.jpg', 'jsmith', { 'pet', 'cute' });// Replace the 
>> existing set entirelyUPDATE images SET tags = { 'kitten', 'cat', 'lol' } 
>> WHERE id = 'jsmith';
>>
>> the update cql statement uses "WHERE id = 'jsmith'" while the table
>> images did not define key "id". I think it's just a slip of the pen.
>>
>> 2、 in http://cassandra.apache.org/doc/latest/cql/types.html, when
>> describing “User-Defined Types”,  the giving example is:
>>     CREATE TYPE phone (
>>
>>     country_code int,
>>     number text,)CREATE TYPE address (
>>     street text,
>>     city text,
>>     zip int,
>>     phones map<text, phone>)CREATE TABLE user (
>>     name text PRIMARY KEY,
>>     addresses map<text, frozen<address>>)
>>
>> and when I try to create type address, one error occur:
>>
>> cqlsh:counterks> CREATE TYPE address (
>>              ...     street text,
>>              ...     city text,
>>              ...     zip int,
>>              ...     phones map<text, phone>
>>              ... );
>>
>> InvalidRequest: code=2200 [Invalid query] message="Non-frozen UDTs are not 
>> allowed inside collections: map<text, phone>"
>>
>> I change the create statement, like:
>>
>> CREATE TYPE address (
>>     street text,
>>     city text,
>>     zip int,
>>     phones map<text, frozen<phone>>
>> );
>>
>> it works, and the create table user statement works well. Unfortunately,
>> when running the insert statement below, error occur:
>>
>> INSERT INTO user (name, addresses)
>>           VALUES ('z3 Pr3z1den7', {
>>               'home' : {
>>                   street: '1600 Pennsylvania Ave NW',
>>                   city: 'Washington',
>>                   zip: '20500',
>>                   phones: { 'cell' : { country_code: 1, number: '202 
>> 456-1111' },
>>                             'landline' : { country_code: 1, number: '...' } }
>>               }
>>               'work' : {
>>                   street: '1600 Pennsylvania Ave NW',
>>                   city: 'Washington',
>>                   zip: '20500',
>>                   phones: { 'fax' : { country_code: 1, number: '...' } }
>>               }
>>           })
>>
>> error:
>>
>> SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query] 
>> message="line 10:14 mismatched input 'work' expecting '}' (...: '...' } }    
>>           }              ['wor]k' :...)">
>>
>>  Is the any suggestion about the problem 2?
>>
>> Best wishes for everyone, thank you for your watching !
>>
>> ------------------------------
>> zha...@easemob.com
>>
> --
> ————————
> Ben Slater
> Chief Product Officer
> Instaclustr: Cassandra + Spark - Managed | Consulting | Support
> +61 437 929 798
>
> --
————————
Ben Slater
Chief Product Officer
Instaclustr: Cassandra + Spark - Managed | Consulting | Support
+61 437 929 798

Reply via email to