我在cassandra中有一个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
,我们称之为 my_array
.
当我尝试使用gocql进行插入时,如下所示:
err := gocql.Session.Query('INSERT into test_table (key,test_array)
VALUES (?,?)', 'key', my_array).Exec()
我得到一堆空值而不是数组。基本上,test类型没有正确Map到我创建的udt,这是我的假设。
从本质上说,我的问题是如何将go中的结构Map到udt,以便正确识别类型。
2条答案
按热度按时间vbopmzt11#
也许这不重要,但我已经读过了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))
表的正确定义。我没有办法尝试你的代码,告诉我如果它改变了什么。我读到的另一件事是在cassandra中更新一个自定义类型的集合类型,我认为您应该在cassandra中定义您的自定义类型,因为您有一个自定义类型的列表。
u59ebvdq2#
per:将go结构转换为json
通过重命名字段使其导出,问题得到了解决。这样gocql就可以看到x&y数据类型。
只需重命名
x
至X
以及y
至Y
. 会成功的