IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 自定义Annotation的实用场景和实操代码(hbase交互) -> 正文阅读

[大数据]自定义Annotation的实用场景和实操代码(hbase交互)

场景

注解的实用,当然是为了让我们的代码更具有扩展性, 更加的高大上, 例如将 数据库表与对象添加注解,进行对应.

例如:
我们可以直接将一条半结构化数据经过处理放到hbase数据库中,但是这样的话,如果列非常多的情况,我们的代码也要很长,但是实用注解配合反射的用法,可以提高扩展性,在数据量大,列多的情况,可以简化我们的代码

代码:
自定义注解:

/**
* 规则: 列名为""时, 属性名就是列名
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {

    String family()  default "info";
    String column()  default "";
}

 /**
     *   以字符串的形式像hbase中插入数据
     * @param data
     * @throws Exception
     */
     public void insertDatas(String data) throws  Exception{

        //1. 获取到要添加的数据
        String[] split = data.split("\t");
        String  call1=split[0];
        String  call2=split[1];
        String  callTime=split[2];
        String  duration=split[3];

        //2.  TODO 设计rowkey 重要

     
        // rowkey = partitionNum+ call1 +call2+time+duration

        String rowkey=getPartitionNum(call1,callTime)+"_"+call1+"_"+call2+"_"+callTime+"_"+duration;
        Put put = new Put( rowkey.getBytes());

        put.addColumn(Names.CF_CALLER.value().getBytes(), Bytes.toBytes("call1"),Bytes.toBytes(call1));
        put.addColumn(Names.CF_CALLER.value().getBytes(), Bytes.toBytes("call2"),Bytes.toBytes(call2));
        put.addColumn(Names.CF_CALLER.value().getBytes(), Bytes.toBytes("callTime"),Bytes.toBytes(callTime));
        put.addColumn(Names.CF_CALLER.value().getBytes(), Bytes.toBytes("duration"),Bytes.toBytes(duration));

        //插入数据
        putData(put);

    }

注解+反射的方式: 这样的话,只需要添加相应的注解,再用反射进行获取值就ok了!
(虽然看起来可能比较麻烦)

 protected   void putData(Object obj) throws  Exception{

        // TODO 1.根据注解获取到对应表的名称

        Class clazz = obj.getClass();
        com.dxy.common.api.TableName  annotation = (com.dxy.common.api.TableName)clazz.getAnnotation(com.dxy.common.api.TableName.class);

        String tableName = annotation.value();

        Connection connection = getConnection();
        Table connectionTable = connection.getTable(TableName.valueOf(tableName));

        // TODO 2. 获取rowkey值
        String rowkey="";
        Field[] fields = clazz.getDeclaredFields();//获取对象全部的属性

        for (Field field : fields) {

            Rowkey rowkeyAnno =  field.getAnnotation(Rowkey.class);
            if(rowkeyAnno != null){
                field.setAccessible(true);
                rowkey = (String)field.get(obj);// 获取到属性的值
            }
        }

         // TODO 3. 获取列和列族
        Put put=new Put(rowkey.getBytes());

        for (Field field : fields) {
            Column columnAn = field.getAnnotation(Column.class);

            if(columnAn!= null){
                String family = columnAn.family();
                String column = columnAn.column();

                if(column == null  || column.equals("")){
                    column = field.getName();//获取到属性的名称
                }
                
                field.setAccessible(true);
                String value=(String)  field.get(obj);
                put.addColumn(Bytes.toBytes(family),Bytes.toBytes( column),Bytes.toBytes(value));
            }

        }
        
        connectionTable.put(put);
        
        connectionTable.close();
    }
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:24:49  更:2021-08-28 09:26:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:15:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码