Hbase之校验指定数据是否存在

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by similarface on 16/8/22.
 * 校验指定数据是否存在
 *
 */
public class CheckExistSpecificData {
    public static void main(String args[]) throws IOException{
        Configuration configuration = HBaseConfiguration.create();
        Connection connection = ConnectionFactory.createConnection(configuration);
        //建立表的连接
        Table table = connection.getTable(TableName.valueOf("testtable"));
        //
        List<Put> puts = new ArrayList<Put>();
        //
        Put put1 = new Put(Bytes.toBytes("10086"));
        put1.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"), Bytes.toBytes("中国移动"));
        puts.add(put1);

        Put put2 = new Put(Bytes.toBytes("10010"));
        put2.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"), Bytes.toBytes("中国联通"));
        puts.add(put2);

        Put put3 = new Put(Bytes.toBytes("10010"));
        put3.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual2"), Bytes.toBytes("中国联通客服"));
        puts.add(put3);
        //插入两行数据
        table.put(puts);

        Get get1 = new Get(Bytes.toBytes("10010"));
        get1.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"));
        //Only check for existence of data, but do not return any of it.
        //校验数据是否存在但是不返回任何数据  ==> Get 1 Exists: true
        get1.setCheckExistenceOnly(true);
        //检查存在的第一个数据。==>Get 1 Size: 0
        Result result1 = table.get(get1);
        //这个地方val并没有值 ==>Get 1 Value: null
        byte[] val = result1.getValue(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"));
        System.out.println("Get 1 Exists: " + result1.getExists());
        System.out.println("Get 1 Size: " + result1.size());
        System.out.println("Get 1 Value: " + Bytes.toString(val));
        //获取行键
        Get get2 = new Get(Bytes.toBytes("10010"));
        //获取列族
        get2.addFamily(Bytes.toBytes("colfam1"));
        //设置校验是否存在 ==>Get 2 Exists: true
        get2.setCheckExistenceOnly(true);
        //获取数据集 ==>Get 2 Size: 0
        Result result2 = table.get(get2);

        System.out.println("Get 2 Exists: " + result2.getExists());
        System.out.println("Get 2 Size: " + result2.size());

        //获取行键
        Get get3 = new Get(Bytes.toBytes("10010"));
        //获取列族 但是错误的列限定符
        get3.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual9999"));
        //校验是否存在 ==>Get 3 Exists: false
        get3.setCheckExistenceOnly(true);
        //Get 3 Size: 0
        Result result3 = table.get(get3);

        System.out.println("Get 3 Exists: " + result3.getExists());
        System.out.println("Get 3 Size: " + result3.size());
        //获取行键100010
        Get get4 = new Get(Bytes.toBytes("10010"));
        //获取正确的列族 错误的列限定符
        get4.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual9999"));
        //获取正确的列族 正确的列限定符 ==> Get 4 Exists: true
        get4.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"));
        get4.setCheckExistenceOnly(true);
        //Get 4 Size: 0
        Result result4 = table.get(get4);
        System.out.println("Get 4 Exists: " + result4.getExists());
        System.out.println("Get 4 Size: " + result4.size());
    }
}

/**
 result:
 Get 1 Exists: true
 Get 1 Size: 0
 Get 1 Value: null
 Get 2 Exists: true
 Get 2 Size: 0
 Get 3 Exists: false
 Get 3 Size: 0
 Get 4 Exists: true
 Get 4 Size: 0
 *
 */
时间: 2024-08-03 19:39:01

Hbase之校验指定数据是否存在的相关文章

hadoop生态系统学习之路(八)hbase与hive的数据同步以及hive与impala的数据同步

在之前的博文中提到,hive的表数据是可以同步到impala中去的.一般impala是提供实时查询操作的,像比较耗时的入库操作我们可以使用hive,然后再将数据同步到impala中.另外,我们也可以在hive中创建一张表同时映射hbase中的表,实现数据同步. 下面,笔者依次进行介绍. 一.impala与hive的数据同步 首先,我们在hive命令行执行show databases;可以看到有以下几个数据库: 然后,我们在impala同样执行show databases;可以看到: 目前的数据库

HBase存储剖析与数据迁移

1.概述 HBase的存储结构和关系型数据库不一样,HBase面向半结构化数据进行存储.所以,对于结构化的SQL语言查询,HBase自身并没有接口支持.在大数据应用中,虽然也有SQL查询引擎可以查询HBase,比如Phoenix.Drill这类.但是阅读这类SQL查询引擎的底层实现,依然是调用了HBase的Java API来实现查询,写入等操作.这类查询引擎在业务层创建Schema来映射HBase表结构,然后通过解析SQL语法数,最后底层在调用HBase的Java API实现. 本篇内容,笔者并

使用 bcp 指定数据文件中的前缀长度

使用 bcp 指定数据文件中的前缀长度 当以本机格式将数据大容量导出到数据文件时,为使文件存储空间最为紧凑,bcp 命令将在每个字段前面使用一个或多个字符来指示字段的长度. 这些字符称为"长度前缀字符". bcp 的前缀长度提示 如果某个交互式 bcp 命令包含不带格式化文件开关 (-f) 或数据格式开关(-n.-c.-w 或 -N)的 in 或 out 选项,则该命令会提示输入每个数据字段的前缀长度,如下所示: Enter prefix length of field <fie

Oracle中使用游标获取指定数据表的所有字段名对应的字符串

操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR(255):='STAFFDOC'; --定义要查询的数据表名变量,STAFFDOC为我测试用的数据表名,请修改成您的数据库中的对应数据表名字mystring NVARCHAR2(4000):=''; --定义要输出的字符串变量 cursor mycursor is --定义游标          s

Oracle&gt;&gt;通过PL/SQL程序块判断,指定用户的指定数据表和序列是否存在,如果存在则删除,否则新创建。并且为表添加含有字符串数据,execute immediate执行insert语句中有字符串解决办法

--变量声明 declare num0 number; num1 number; begin --判断用户为:SYSTEM的数据库中是否存在相关数据表和序列,存在则删除,不存在则新创建,DBMS_OUTPUT.put_line等同java中的System.out.println输出语句 DBMS_OUTPUT.put_line('正在初始化数据库信息,请稍后......'); --以下参数说明: --所涉及到的参数值必须为大写 --sequence_owner:指定哪个数据库用户的序列: seq

sqlserver 自增ID插入指定数据

set identity_insert 表名 ON --允许对自增列Id插入指定数据 insert into table_name(Id,Name) values(1,'test') set identity_insert 表名 OFF --关闭对自增列Id插入指定数据 注意: 1.set identity_insert只对当前会话生效. 2.set identity_insert 表名 ON 设置后,必须显示指定Id,否则插入错误.如insert into table_name values(

SQLServer 2012之AlwaysOn —— 指定数据同步链路,消除网络抖动导致的提交延迟问题

原文:SQLServer 2012之AlwaysOn -- 指定数据同步链路,消除网络抖动导致的提交延迟问题 事件起因:近期有研发反应,某数据库从08切换到12环境后,不定期出现写操作提交延迟的问题: 事件分析:在排除了系统资源争用等问题后,初步分析可能由于网络抖动导致同步模式alwayson节点经常出现会话超时等待提交的问题导致. 经过排查,扩展事件里发现不定期出现35202错误,这是一条副本连接恢复的消息. 由于机房网络环境复杂,数据库服务器和应用服务器混用一个交换机,在业务高峰期时,因上联

mysql5.7基础 更新表格中某列为指定数据的 一行

镇场文:       学儒家经世致用,行佛家普度众生,修道家全生保真,悟易理象数通变.以科技光耀善法,成就一良心博客.______________________________________________________________________________________________________ Operating System:UbuntuKylin 16.04 LTS 64bitmysql: Ver 14.14 Distrib 5.7.17, for Linux (

Jsoup进阶之获取指定数据

使用Jsoup解析html中的指定数据,十分方便.Jsoup工具十分强大,十分好用.但网上似乎没有很好的例子,本文的目的即在于此.建议仔细阅读代码中的几个例子,Jsoup解析数据不外乎这几种类型. 第一步:将Jsoup JAR包导入项目 第二步:使用Jsoup API 1, 定位 通过div的属性值,定位到html的div(块),即所需要内容对应的块. 示例代码如下: <div class="content"> 2, 筛选数据 a, 通过标签头,在div中继续筛选数据.可能