向hbase的rowkey中插入‘\x00’

由于场景需要,需要向hbase中插入包含‘\x00’的rowkey,例:

起初以为直接以拼接字符串的形式往里插就可以,但是读源码发现hbase会对\做二进制转译,如下:

‘\’会被转译为\x5c

解决办法:我们在插入数据的时候直接以byte[] 的形式往hbase表插,代码如下:

 

public class Test_DESC {


    public static void main(String[] args) throws IOException {

        System.setProperty("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
        System.setProperty("hadoop.home.dir", "C:\\hadoop-2.6.0-cdh5.11.0");
        Configuration hbaseConf = HBaseConfiguration.create();
        hbaseConf.set("hbase.zookeeper.quorum","zt01:2181,zt02:2181,zt03:2181");
        HTable htabe = new HTable(hbaseConf,"INDEX_SDC_TEST");
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        byte[] a = Bytes.toBytes("hello");


        byte b = (byte) 0;

        byte[] c = new byte[] {b};
        byte[] d = Bytes.toBytes("999");
        byte[] e = ArrayUtils.addAll(a,c);
        byte[] indexColumnKey1 = ArrayUtils.addAll(e,d);

        Put put = new Put(indexColumnKey1);
        put.add(Bytes.toBytes("0"), Bytes.toBytes("_0"), Bytes.toBytes("x"));
        htabe.put(put);
    }

}

这样就避免中间字符串转byte时的特殊符号转译!

 

 

 

 

 

### 如何在 HBase 2.x 版本中插入数据 HBase 提供了多种方式来插入数据,其中最常见的方法之一是通过 `put` 命令。以下是关于如何使用 `put` 命令向 HBase 表中插入数据的具体说明。 #### 使用 HBase Shell 的 Put 命令 在 HBase Shell 中,可以使用 `put` 命令将单条记录写入到指定的表中。其基本语法如下: ```bash put '<table_name>', '<row_key>', '<column_family>:<qualifier>', '<value>' ``` - `<table_name>` 是目标表的名字。 - `<row_key>` 是要插入的行键。 - `<column_family>:<qualifier>` 定义列族和限定符。 - `<value>` 是实际存储的数据值。 例如,假设有一个名为 `my_table` 的表,该表具有一个名为 `cf1` 的列族,则可以通过以下命令插入一条数据[^3]: ```bash put 'my_table', 'row1', 'cf1:col1', 'value1' ``` 此命令将在 `my_table` 表中的 `row1` 这一行、`cf1` 列族下的 `col1` 列设置值为 `value1`。 #### 使用 Java API 插入数据 除了 HBase Shell 外,还可以利用 Java API 来完成更复杂的批量插入操作。下面是一个简单的例子,演示如何使用 Java 向 HBase 表中插入数据[^4]: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Table; public class InsertDataExample { public static void main(String[] args) throws Exception { Configuration config = HBaseConfiguration.create(); Connection connection = ConnectionFactory.createConnection(config); Table table = connection.getTable(TableName.valueOf("my_table")); // 创建一个新的Put对象并关联RowKey Put put = new Put("row1".getBytes()); // 设置列族、列名及其对应的值 put.addColumn("cf1".getBytes(), "col1".getBytes(), "value1".getBytes()); // 将Put对象提交至表格 table.put(put); System.out.println("成功插入数据!"); table.close(); connection.close(); } } ``` 这段代码展示了如何创建一个连接实例,并通过 `Put` 对象定义待插入的内容,最后调用 `table.put()` 方法将其保存到数据库中。 #### 性能优化建议 当需要处理大量数据时,单独多次调用 `put` 可能效率较低。此时可考虑采用批量插入的方式,即先构建多个 `Put` 实例存放在列表里,再一次性传给 `Table.batch(List)` 或者 `BufferedMutator.mutate(List)` 执行[^4]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值