Java 替换Cassandra Select查询中的Null函数

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访问器接

从cassandra表中选择一组记录

select a1,a2,a3 from tableB where solr_query='...';
其中a1(
int
type)中的一些为空

  • 在Oracle中,我们可以使用
    nvl(a1,0)
  • 在MS SQL Server中,我们可以使用
    isnull(a1,0)
  • 我不知道用卡桑德拉的方式来处理这个问题

    我如何用Java处理这个问题: 创建
    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)
    
        }
      }