对HBase进行过滤

作者: _helloliang | 来源:发表于2016-12-13 22:30 被阅读443次

包括表过滤、列标签过滤、值过滤

HBaseAdmin admin = null;

List<Filter> filters = new ArrayList<>();

// 值过滤
// 保留列族cf:列标签cq="lunch"的行
Filter lunchFilter = new SingleColumnValueFilter(
        Bytes.toBytes("cf"),
        Bytes.toBytes("cq"), 
        CompareOp.EQUAL,
        Bytes.toBytes("lunch"));
// 保留列族cf:列标签cq="pageview"的行
Filter pageviewFilter = new SingleColumnValueFilter(
        Bytes.toBytes("cf"),
        Bytes.toBytes("cq"), 
        CompareOp.EQUAL,
        Bytes.toBytes("pageview"));
// 添加过滤条件
filters.add(lunchFilter);
filters.add(pageviewFilter);
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE, filters);

// 列标签过滤
// 只获取部分列(列标签)
String[] columns = new String[]{"UUID", "SERVER_TIME", "PLATFORM", "BROWSER_NAME"};
// 添加过滤条件
filterList.addFilter(this.getColumnFilter(columns));

// 设置scan
List<Scan> scans = new ArrayList<Scan>();
try {
    admin = new HBaseAdmin(conf);

    byte[] tableName = Bytes.toBytes("test");
    if (admin.tableExists(tableName)) {
        // 如果表存在
        Scan scan = new Scan();
        // 对针对特定表进行过滤
        scan.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, tableName);
        scan.setFilter(filterList);
        // 可添加多个Scan对象
        scans.add(scan);
    }    
} catch (Exception e) {
    throw new RuntimeException("创建HBaseAdmin发生异常", e);
} finally {
    if (admin != null) {
        try {
            admin.close();
        } catch (IOException e) {
            // nothings
        }
    }
}        

if (scans.isEmpty()) {
    throw new IOException("没有表存在,无法创建scan集合");
}
TableMapReduceUtil.initTableMapperJob(scans, ActiveVisitorMapper.class, UserStatisticD.class, Text.class, job, false);       
private Filter getColumnFilter(String[] columns) {
    int length = columns.length;
    byte[][] filter = new byte[length][];
    for (int i = 0; i < length; i++) {
        filter[i] = Bytes.toBytes(columns[i]);
    }
    return new MultipleColumnPrefixFilter(filter);
}

相关文章

  • 对HBase进行过滤

    包括表过滤、列标签过滤、值过滤

  • HBase Filter 过滤器之 Comparator 原理及

    前言:上篇文章HBase Filter 过滤器概述对HBase过滤器的组成及其家谱进行简单介绍,本篇文章主要对HB...

  • HBase客户端API-分页过滤器

    前一篇博客说了一下 HBase 的一些过滤器,今天看看 HBase 的分页过滤器。 在 HBase 中分页过滤是通...

  • HBase过滤器

    一、Hbase过滤器的介绍 HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维...

  • HBase Java API 02:过滤器

    HBase版本:1.2.6 1. HBase过滤器简介 (1) 过滤器简介 (2) 过滤器分类 (3) 运算符种类...

  • HBase学习目录

    Hbase安装Hbase Shell general操作 ddl操作 dml操作 内置过滤器samplehttp:...

  • HBase Shell操作

    HBase Shell是HBase的命令行工具,提供了对HBase的管理操作,可以对HBase中的表进行数据的增、...

  • 【HBase】HBase 过滤器

    [TOC] 一、Filter 介绍 一般来说调整表设计就可以优化访问模式。但是有时已经把表设计调整得尽可能好了,为...

  • HBase过滤器的使用

    基本概念 HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维度(行,列,数据版本...

  • HBase原理深入解析(一)----HBase架构总览

    前言:掌握Hbase的重要性不言而喻,掌握Hbase的设计原理更是重中之重。本文是对HBase原理进行讲解系列文章...

网友评论

    本文标题:对HBase进行过滤

    本文链接:https://www.haomeiwen.com/subject/segbmttx.html