获取指定行的数据
我们使用
Get
对象与
Table
对象就可以获取到表中的数据了。
//获取数据
Get get = new Get(Bytes.toBytes("row1")); //定义get对象
Result result = table.get(get); //通过table对象获取数据
System.out.println("Result: " + result);
//很多时候我们只需要获取“值” 这里表示获取 data:1 列族的值
byte[] valueBytes = result.getValue(Bytes.toBytes("data"), Bytes.toBytes("1")); //获取到的是字节数组
//将字节转成字符串
String valueStr = new String(valueBytes,"utf-8");
System.out.println("value:" + valueStr);
上述代码就可以查到
table
对象中行
row1
的数据了,亲自试试验证一下结果吧。
扫描表中的数据
只获取一行数据显然不能满足我们全部的需求,我们想要获取表中所有的数据应该怎么操作呢?
Scan
、
ResultScanner
对象就派上用场了,接下来我们看个示例你应该就明白这两个对象的用法了:
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
try {
for (Result scannerResult: scanner) {
System.out.println("Scan: " + scannerResult);
byte[] row = scannerResult.getRow();
System.out.println("rowName:" + new String(row,"utf-8"));
}
} finally {
scanner.close();
}
这样就能将指定表中的数据全部输出到控制台了。
运行上述代码你会看到类似这样的结果:
Scan: keyvalues={row1/data:1/1542657887632/Put/vlen=6/seqid=0} rowName:row1 Scan: keyvalues={row2/data:2/1542657887634/Put/vlen=6/seqid=0} rowName:row2
将表的数据和行以及列都展示了。
编程要求
使用本关知识,在右侧编辑器
begin-end
处补充代码,输出
t_step3
表中行号为
row1
,列族为
data:1
的值(以
utf-8
编码),输出
table_step3
表中所有行的行名称(因为直接输出
scannerResult
会带有时间戳,所以输出行名方便测评)。
package step3;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;
public class Task {
public void queryTableInfo()throws Exception{
/********* Begin *********/
Configuration config = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(config);
Admin admin = connection.getAdmin();
TableName tableName = TableName.valueOf("t_step3");
Table table = connection.getTable(tableName);
// 获取数据
Get get = new Get(Bytes.toBytes("row1")); // 定义 get 对象
Result result = table.get(get); // 通过 table 对象获取数据
//System.out.println("Result: " + result);
// 很多时候我们只需要获取“值” 这里表示获取 data:1 列族的值
byte[] valueBytes = result.getValue(Bytes.toBytes("data"), Bytes.toBytes("1")); // 获取到的是字节数组
// 将字节转成字符串
String valueStr = new String(valueBytes,"utf-8");
System.out.println("value:" + valueStr);
TableName tableStep3Name = TableName.valueOf("table_step3");
Table step3Table = connection.getTable(tableStep3Name);
// 批量查询
Scan scan = new Scan();
ResultScanner scanner = step3Table.getScanner(scan);
try {
int i = 0;
for (Result scannerResult: scanner) {
//byte[] value = scannerResult.getValue(Bytes.toBytes("data"), Bytes.toBytes(1));
// System.out.println("Scan: " + scannerResult);
byte[] row = scannerResult.getRow();
System.out.println("rowName:" + new String(row,"utf-8"));
}
} finally {
scanner.close();
}
/********* End *********/
}
}
start-dfs.sh
start-hbase.sh
hadoop fs -ls /hbase
版权归原作者 是草莓熊吖 所有, 如有侵权,请联系我们删除。