2

我在 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: 的列表[]test_type,让我们调用它my_array

当我尝试使用 gocql 进行插入时:

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

我得到一堆空值而不是我的数组。基本上 test_type 没有正确映射到我创建的 UDT 是我的假设。

本质上,我的问题是如何将结构映射到 udt 以便正确识别类型。.

4

2 回答 2

1

也许这并不重要,但我在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 中定义您的自定义类型,因为您有一个自定义类型列表。

于 2018-10-16T22:58:07.477 回答
0

Per:将 Go 结构转换为 JSON

该问题已通过重命名字段以便导出来解决。这样 gocql 可以看到数据类型 x & y。

只需重命名xXyto Y。会成功的

于 2018-10-16T23:11:12.840 回答