在带有 GoCQL 的 CQL bigint 列上使用 IN() 运算符返回"can not marshal []int64 into bigint"



我在cassandra中有两个bigint类型的列。

使用gocql,我想使用IN子句从这些列中检索值。

我的查询看起来像这样-

QUERY := select column1,column2,column3 from tableName
where id1 in (?)
and id2 in (?)
ALLOW FILTERING;

我从我的代码中调用这个查询,像-

query := db.CassandraSession.Query(QUERY, Ids1, Ids2)

,其中Ids1和Ids2是int64类型的两个切片(即[]int64)

当使用 执行查询时

iter := query.Iter()
for iter.Scan(.....
)
err := iter.Close()

我得到错误can not marshal []int64 into bigint

谁能帮我解决吗?

我怀疑问题出在你的代码中,但我不得不承认我只是猜测,因为你的帖子中缺乏信息。

你需要提供额外的信息,使别人更容易帮助你。至少,您应该提供复制问题的详细信息:

  • 最小表模式示例
  • 最小示例代码

作为一个旁注,但非常重要的一点是,在应用程序查询中使用ALLOW FILTERING几乎总是不好的做法,我们绝对不建议在生产中使用它,因为它的性能非常不可预测。

同样,尽可能避免使用IN()操作符。使用2或3个元素是可以的,但超过这个数量就会对应用程序和集群的性能产生不利影响。

在大多数情况下,使用ALLOW FILTERINGIN()操作符表明数据模型是错误的,需要重新设计表。干杯!

最新更新