gocql SELECT *不返回所有列
我在尝试为我的应用程序实现一些计数器时遇到了这种奇怪的行为。基本上,我做了一个这样的计数器表:
CREATE TABLE stats_dev.log_counters ( date text PRIMARY KEY,
all counter
);
然后,我也想计算一些特定类型的消息,因此在Go应用程序中,我更改了表以添加以前没有的列。
我的应用程序正在增长,并且我开始有30列以上(不应超过50列),并且当我想检索所有这些计数器时,结果中缺少一些列。
query := s.Query(`SELECT * FROM `+_apiCountersTable+` WHERE date IN ?`, dates)res, err := query.Iter().SliceMap()
这给我返回了30列超过34列的信息。虽然,当我在CQLSH上执行请求时:
cqlsh:stats_dev> SELECT * FROM api_counters WHERE date = 'total';
我得到适当的完整结果。因此:
- 这是否来自我的要求,应该有所不同?
- 可能来自gocql驱动程序吗?
- 这种模式完全愚蠢吗?
我的临时解决方案是从system.schema_columns
表中选择列名称和字符串。将所有这些都加入到我的SELECT查询中…
非常感谢您的帮助。
回答:
感谢安迪的帮助。
起初,我认为考虑到您告诉我的内容,我宁愿偶尔执行一次SELCT
column_name操作,system.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 *不返回所有列 的全部内容, 来源链接: utcz.com/qa/403801.html