使用 gocql 将用户定义类型的数组插入 Cassandra
Inserting an array of user defined types into Cassandra using gocql
我在 Cassandra 中有一个 UDT,我有一个 table 在其架构中包含这些 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
}
然后我有一个函数,本质上是 returns 这个 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,以便正确识别类型。 .
也许这不重要,但我在 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))
table的正确定义。我没有办法尝试你的代码,告诉我它是否改变了什么。
我读过的另一件事在
我认为你应该在 Cassandra 中定义你的自定义类型,因为你有一个自定义类型列表。
每个:Converting Go struct to JSON
已通过重命名字段使其导出来解决问题。这样 gocql 就可以看到数据类型 x 和 y。
只需将 x
重命名为 X
并将 y
重命名为 Y
。会成功的
我在 Cassandra 中有一个 UDT,我有一个 table 在其架构中包含这些 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
}
然后我有一个函数,本质上是 returns 这个 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,以便正确识别类型。 .
也许这不重要,但我在 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))
table的正确定义。我没有办法尝试你的代码,告诉我它是否改变了什么。
我读过的另一件事在
每个:Converting Go struct to JSON
已通过重命名字段使其导出来解决问题。这样 gocql 就可以看到数据类型 x 和 y。
只需将 x
重命名为 X
并将 y
重命名为 Y
。会成功的