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

时间:2018-10-16 21:15:18

标签: go cassandra gocql

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

2 个答案:

答案 0 :(得分: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))

表的正确定义。我还没有办法尝试您的代码,请告诉我它是否有所更改。

我读过的另一本书在Update a collection type of a custom type in cassandra中 我认为您应该在Cassandra中定义自定义类型,因为您有一个自定义类型列表。

答案 1 :(得分:0)

每位:Converting Go struct to JSON

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

只需将x重命名为X,并将y重命名为Y。会成功的