【问题标题】:Inserting an array of user defined types into Cassandra using gocql使用 gocql 将用户定义类型的数组插入 Cassandra
【发布时间】:2018-10-17 11:01:11
【问题描述】:

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

【问题讨论】:

    标签: go cassandra gocql


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

    【讨论】:

    • 嘿,你是对的..这是我的语法错误。看看我发布的答案。我建议的更改正确地将数据写入 Cassandra :)
    • 我见过。我现在的疑问是关于类型的定义。为什么你在 Cassandra 中声明 test_type 和 x 和 y 为浮点数?不是 Golang 的地图吗?
    • 您也可以这样做。但是,在我的用例中,我想将其表示为结构而不是映射。
    【解决方案2】:

    每个人:Converting Go struct to JSON

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

    只需将 x 重命名为 Xy 重命名为 Y。会成功的

    【讨论】:

      猜你喜欢
      • 2017-09-23
      • 2018-09-25
      • 2014-12-31
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 2016-12-16
      • 2014-12-30
      • 2021-08-25
      相关资源
      最近更新 更多