对HBase进行过滤

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

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);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,314评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,848评论 6 13
  • HTML标签解释大全 一、HTML标记 标签:!DOCTYPE 说明:指定了 HTML 文档遵循的文档类型定义(D...
    米塔塔阅读 8,645评论 1 41
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx阅读 12,585评论 0 16
  • 有时候,很多时候。 做事情,做决定,到需带有一种悲壮的心情。
    M_152阅读 3,068评论 0 0