【问题标题】:Hbase Scan Filter for Records that are Missing Column or the Column Value is null缺少列或列值为空的记录的 Hbase 扫描过滤器
【发布时间】:2016-07-27 16:10:38
【问题描述】:

我在 col 系列 (CF) 中有 3 个 cols {col1, col2, col3}。我想编写一个扫描,以便选择所有具有col1='val1' and col2='val2' and (col3 is missing or col3 is null) 的行。

在 Java 中执行此操作 - 抱歉,我对 hbase 完全陌生 ;-)

【问题讨论】:

    标签: java hadoop hbase database-scan


    【解决方案1】:

    我自己在网上很难找到答案。我终于弄明白了,而且很简单——只是没有答案:

        Scan scanner = new Scan();
    
        SingleColumnValueFilter filter = new SingleColumnValueFilter(
            Bytes.toBytes( "some family" ),
            Bytes.toBytes( "some column" ),
            CompareFilter.CompareOp.EQUAL,
            Bytes.toBytes( "" )
        );
        filter.setFilterIfMissing( false );
    
        scanner.setFilter( filter );
        return scanner;
    

    解决方案的关键部分是将 setFilterIfMissing 设置为 false 并与空字符串进行比较。

    【讨论】:

    • 我不必 setFilterIfMissing(false);我认为默认情况下它是错误的
    【解决方案2】:

    我认为下面的代码可以帮助到你:

        FilterList filterList = new FilterList();
        SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes("someFamily"), Bytes.toBytes("col1"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes("val1"));
        filter1.setFilterIfMissing(true);
        filterList.addFilter(filter1);
    
        SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes("someFamily"), Bytes.toBytes("col2"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes("val2"));
        filter2.setFilterIfMissing(true);
        filterList.addFilter(filter2);
    
        SingleColumnValueFilter filter3 = new SingleColumnValueFilter(Bytes.toBytes("someFamily"), Bytes.toBytes("col3"), CompareFilter.CompareOp.EQUAL, new NullComparator());
        filter3.setFilterIfMissing(false);
        filterList.addFilter(filter3);
    
        Scan scan = new Scan();
        scan.setFilter(filterList);
        ResultScanner resultScanner = table.getScanner(scan);
        for (Result res : resultScanner) {
            System.out.println(res);
        }
        resultScanner.close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-29
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多