使用gocql将用户定义类型的数组插入Cassandra
我在Cassandra中有一个UDT,我有一个在其模式中包含这些UDT数组的表。以下是一个示例:使用gocql将用户定义类型的数组插入Cassandra,go,cassandra,gocql,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)) 然后我有一个函数,基本
CREATE TYPE keyspace.test_type(
x float,
y float)
在我的模式中,我有
CREATE TABLE test_table(
key text,
test_array list<FROZEN <test_type>>,
PRIMARY KEY (key))
然后我有一个函数,基本上返回这个测试类型的列表:[]测试类型
,我们称它为我的数组
当我尝试使用gocql进行插入时,如下所示:
err := gocql.Session.Query('INSERT into test_table (key,test_array)
VALUES (?,?)', 'key', my_array).Exec()
我得到一堆空值,而不是数组。基本上,test_类型没有正确映射到我创建的UDT,这是我的假设
本质上,我的问题是如何将go中的结构映射到udt,以便正确识别类型 也许这不重要,但我已经读到它不重要了
CREATE TABLE test\u TABLE(
关键文本,
测试数组列表>,
主键(键))
但是
CREATE TABLE test\u TABLE(
关键文本,
测试数组列表,
主键(键))
表的正确定义。我没有办法尝试你的代码,如果它改变了什么,请告诉我
我读到的另一件事是
我认为您应该在Cassandra中定义自定义类型,因为您有一个自定义类型列表。Per:
通过重命名字段以使其导出,问题得以解决。这样gocql就可以看到数据类型x&y
只需将
x
重命名为x
并将y
重命名为y
。你说得对,这是我的语法错误。看看我贴的答案。我建议的改变正确地将数据写入了Cassandra:)我已经看到了。我现在怀疑的是类型的定义。为什么在Cassandra中将x和y声明为float的test_类型?这不是戈朗的地图吗?你也可以。然而,在我的用例中,我希望将它表示为一个结构,而不是一个映射。
err := gocql.Session.Query('INSERT into test_table (key,test_array)
VALUES (?,?)', 'key', my_array).Exec()