使用gocql将用户定义类型的数组插入cassandra

gdrx4gfi  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(404)

我在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,以便正确识别类型。

vbopmzt1

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中定义您的自定义类型,因为您有一个自定义类型的列表。

u59ebvdq

u59ebvdq2#

per:将go结构转换为json
通过重命名字段使其导出,问题得到了解决。这样gocql就可以看到x&y数据类型。
只需重命名 xX 以及 yY . 会成功的

相关问题