Java 替换Cassandra Select查询中的Null函数
从cassandra表中选择一组记录Java 替换Cassandra Select查询中的Null函数,java,cassandra,Java,Cassandra,从cassandra表中选择一组记录 select a1,a2,a3 from tableB where solr_query='...'; 其中a1(inttype)中的一些为空 在Oracle中,我们可以使用nvl(a1,0) 在MS SQL Server中,我们可以使用isnull(a1,0) 我不知道用卡桑德拉的方式来处理这个问题 我如何用Java处理这个问题: 创建TableBObject类,其中所有属性都映射到tableB(cassandra表) 使用访问器方法创建Java访问器接
select a1,a2,a3 from tableB where solr_query='...';
其中a1(int
type)中的一些为空
nvl(a1,0)
isnull(a1,0)
TableBObject
类,其中所有属性都映射到tableB
(cassandra表)
使用访问器方法创建Java访问器接口
@Accessor
public interface TableBAccessor
{
@Query(select a1,a2,a3 from tableB where solr_query='...';)
Result<TableBObject> getTableOnSolrQuery (@Param("solrQuery") String solrQuery);
}
如上所述,我用Java处理同样的问题
这对我来说是额外的努力
在cassandra
中,除了在Java
代码中处理相同的问题外,还有什么解决方案
**我可以不这样写吗**
从表B中选择isnull(a1,0)、a2、a3,其中solr_query='…'代码>或
从表B中选择nvl(a1,0)、a2、a3,其中solr_query='…'代码>
?
**我的问题是:**
如果是,那么如何?如果不,那么为什么?我发现Cassandra不支持基于null的查询,即使是二级索引
您可能需要根据您的情况调整给定的解决方案:让另一个名为a1\u的布尔列未初始化
默认为true
,这将帮助您处理空值。我发现Cassandra不支持基于null的查询,即使是二级索引
您可能需要根据您的情况调整给定的解决方案:让另一个名为a1\u的布尔列未初始化
默认为true
,这将帮助您处理空值。Cassandra中没有内置的对nvl
等函数的支持
从理论上讲,由于Cassandra2.2,您可以定义一个(用户定义的函数)来完成您想要的功能;但是,目前不可能调用将文本作为参数传递的函数,因此nvl(a1,0)
将抛出错误;这种限制将随着时间的推移而消失
同时,您应该首先避免存储空值,或者在客户端应用函数。Cassandra中没有内置的对nvl
等函数的支持
从理论上讲,由于Cassandra2.2,您可以定义一个(用户定义的函数)来完成您想要的功能;但是,目前不可能调用将文本作为参数传递的函数,因此nvl(a1,0)
将抛出错误;这种限制将随着时间的推移而消失
同时,您应该避免首先存储空值,或者应用函数客户端。
Hi SuraJIT,考虑阅读卡桑德拉的文档。Nope,我没有发现任何有用的东西:(嗨,Surajit,考虑读卡桑德拉的文档吧。Nope,我没有发现任何有用的东西:
TableBAccessor tableBAccessor = mappingManager.createAccessor();
List<TableBObject> tabBList = tableBAccessor.getTableOnSolrQuery("someSolrQuery").all();
for(TableBObject tabB : tabBList){
int a1 = tabB.getA1(); /*a1 column in cassandra table*/
if(a1!=null){
// replace a1 by some int value (zero / something else)
}
}