Как вставить значения в таблицу, которая имеет определенные пользователем типы? - PullRequest
3 голосов
/ 09 мая 2020

Я работаю с Scylla (Cassandra) db и пытаюсь создать таблицы, которые имеют дело с User-Defined Types, как показано ниже:

CREATE TYPE process (
    id int,
    discount float
);

CREATE TYPE service (
    id int,
    url text
);

CREATE TABLE data (
    id int PRIMARY KEY,
    fname text,
    lname text,
    service set<frozen<service>>,
    monthly_process frozen<process>
);

Моя путаница в том, как я могу вставить данные в свой data стол. Проблема в том, что я не понимаю, как здесь работают типы process и service и как я могу вставить в них значения?

Я пробовал с приведенным ниже примером, но он дал мне ошибку:

insert into test (id, fname, lname, service, monthly_process ) 
values (1, 'abc', 'world', {'service': [{'id':1, 'url': 'some_url1'},
{'id':2, 'url': 'some_url2'}]}, {'id':1, 'discount': 10.0});

Я получил ошибку:

InvalidRequest: Error from server: code=2200 [Invalid query]
message="Invalid map literal for service of type set<frozen<service>>"

1 Ответ

1 голос
/ 09 мая 2020

Вот рабочая версия вашего запроса;

insert into data (id, fname, lname, service, monthly_process)
values (2, 'abc', 'world', {{id: 1, url: 'some'}, {id : 2, url:'another'}}, {id:1, discount: 10.0});
  • service set<frozen<service>> формат будет {{id:1, url:'a'}, {id:2, url:'b'}}
  • monthly_process frozen<process> формат {id:1, discount: 10.0}
...