Вставка массива определенных пользователем типов в Cassandra с помощью gocql - PullRequest
0 голосов
/ 17 октября 2018

У меня есть UDT в Кассандре, и у меня есть таблица с массивом этих UDT в его схеме.Вот пример:

CREATE TYPE keyspace.test_type(
    x float, 
    y float)

В моей схеме у меня есть

 CREATE TABLE test_table(
     key text,
     test_array list<FROZEN <test_type>>,
     PRIMARY KEY (key))

Внутри пакета go я построил структуру:

type Test_type struct{
     x float32
     y float32
}

Тогда у меня есть функцияпо сути, возвращает список этого test_type: []test_type, назовем его my_array.

Когда я пытаюсь выполнить вставку с использованием gocql, например:

 err := gocql.Session.Query('INSERT into test_table (key,test_array)
                             VALUES (?,?)', 'key', my_array).Exec()

Я получаюкуча нулевых значений вместо моего массива.По сути, test_type не правильно отображается в UDT, который я создал, это мое предположение.

По сути, мой вопрос заключается в том, как вы отображаете структуру в go в udt так, чтобы тип распознавался правильно.,

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Per: Преобразование структуры Go в JSON

Проблема была решена путем переименования полей для экспорта.Таким образом, gocql может видеть тип данных x & y.

Просто переименуйте x в X и y в Y.Сделаем трюк

0 голосов
/ 17 октября 2018

Может быть, это не важно, но я прочитал https://docs.datastax.com/en/cql/3.3/cql/cql_reference/collection_type_r.html, что это не

CREATE TABLE test_table( key text, test_array list<FROZEN test_type>>, PRIMARY KEY (key))

, но

CREATE TABLE test_table( key text, test_array list<FROZEN <test_type>>, PRIMARY KEY (key))

правильное определение таблицы.У меня нет способа попробовать ваш код, скажите мне, если он что-то изменит.

Еще одна вещь, которую я прочитал, в Обновление типа коллекции пользовательского типа в Кассандре IЯ думаю, что вы должны определить свой пользовательский тип в Cassandra, потому что у вас есть список пользовательских типов.

...