Cassandra 2中如何用CQL动态返回非NULL值列
在Cassandra 2.x中动态返回非NULL列的解决方案
Cassandra 2.x本身没有原生的CQL语法支持直接动态返回仅包含非NULL值的列——因为CQL的SELECT语句要么需要明确指定列名,要么用SELECT *返回所有列(包括值为NULL的列),没办法自动过滤掉NULL列。
不过因为你的表数据量很小,性能要求不高,可以通过以下方式实现需求:
客户端过滤(最可行的方案)
先执行SELECT * FROM users WHERE name = 'Jane'获取该行的所有列,然后在你的应用客户端代码里对结果进行处理:遍历每一列的值,过滤掉那些为NULL的列,只保留有非NULL值的列和对应的结果。
举个简单的伪代码示例:
result = execute_query("SELECT * FROM users WHERE name = 'Jane'") filtered_columns = {} for column, value in result.row.items(): if value is not NULL: filtered_columns[column] = value # 输出filtered_columns就是只含非NULL列的结果
这种方式完全不需要修改现有表结构,而且因为数据量小,客户端的过滤操作几乎不会有性能问题。
额外说明
Cassandra的设计是面向预定义查询的,这类动态投影的需求并不符合它的核心设计思路。如果是新表设计的话,你可以考虑用动态列(比如用map类型存储非NULL属性),但对于已有的固定列结构表,客户端过滤是成本最低的实现方式。
内容的提问来源于stack exchange,提问作者Ondra K.
相关产品推荐
相关产品推荐

