登录
首页 >  Golang >  Go问答

如何解决“gocql SELECT *”不返回所有列问题

来源:Golang技术栈

时间:2023-03-08 10:30:05 368浏览 收藏

本篇文章向大家介绍《如何解决“gocql SELECT *”不返回所有列问题》,主要包括golang,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我在尝试为我的应用程序实现一些计数器时遇到了这种奇怪的行为。基本上,我做了一个这样的柜台:

CREATE TABLE stats_dev.log_counters (
  date text PRIMARY KEY,
  all counter
);

然后我还想计算一些特定类型的消息,所以在我的 Go 应用程序中,我 ALTER 表添加了我以前没有的列。

我的应用程序正在增长,我开始有 30 多个列(不应超过 50 个),当我想检索所有这些计数器时,结果中缺少一些列。

query := s.Query(`SELECT * FROM `+_apiCountersTable+` WHERE date IN ?`, dates)
res, err := query.Iter().SliceMap()

这让我返回了 34 列中的 30 之类的东西。虽然,当我在 CQLSH 上提出请求时:

cqlsh:stats_dev> SELECT * FROM api_counters WHERE date = 'total';

我得到了正确的完整结果。所以 :

  1. 这是否来自我的要求,应该有所不同?

  2. 那可能来自gocql驱动程序吗?

  3. 这种模式完全愚蠢吗?

我的临时解决方案是从system.schema_columns表中 SELECT 列名和 strings.Join() 所有这些到我的 SELECT 查询...

非常感谢您的帮助。

正确答案

感谢安迪的帮助。

起初,我认为考虑到您告诉我的内容,我宁愿有时做一个并SELCT column_namesystem.schema_columns我改变我的桌子时刷新它。我会strings.join()在我的SELECT FROM api_counters. 它有效,但如果我有 2 个不同的实例,一个会更新架构,另一个会收到 GET 请求,那么这个实例仍然不知道新列。

然后我重新安排了我的想法,发现显然还有另一种方法可以做到这一点,我只是针对这个模式进行了更改: CREATE TABLE stats_dev.api_counters ( date text, description text, all counter, PRIMARY KEY (date, description) ); 并且我正在根据我期望的描述更新该字段。到目前为止,一切都很好。

我知道这绝对是选项 3:我的模式不是最好的。

今天关于《如何解决“gocql SELECT *”不返回所有列问题》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>