gohbase

1、安装gohbase包

go get  github.com/tsuna/gohbase

2、连接数据库

package main

import (
	"context"
	"encoding/json"
	"fmt"
	"github.com/tsuna/gohbase"
	"github.com/tsuna/gohbase/hrpc"
)
hbase_client := gohbase.NewClient("hbase服务器地址") // 只有ip,没有port。	

3、根据rowkey查询一条记录

返回的json数据解析为可用的结构体数据

func mian(){
    getRequest, err := hrpc.NewGetStr(context.Background(), "表名", "row_key") 
    getRsp, err := hbase_client.Get(getRequest) // Get()方法返回查询结果。通过客户端真正读取数据
    if err !=nil{
	fmt.Println(err.Error())
	}
    type mystruct struct{
	Use string `json:"user_id" `
	Movies map[string][]float64 `json:"movies" ` // 用户看的多部电影 "电影id":[打分int,喜好程度float]
    }

    for _, v := range getRsp.Cells { // v结构体中的Value保存了真正的数据
        value := v.Value
        fmt.Println(string(value))
        var myuser user
        err:= json.Unmarshal(value, &myuser) // value为 []unit8类型的字节数组,所以可以直接放到json.Unmarshal
        if err !=nil{
	    fmt.Println(err.Error())
		}
        fmt.Println(myuser)

}

4、条件查询

查询指定前缀的rowkey

package main

import (
	"context"
	"fmt"
	"github.com/tsuna/gohbase"
	"github.com/tsuna/gohbase/filter"
	"github.com/tsuna/gohbase/hrpc"
	"io"
	"log"
)

func main()  {

	client := gohbase.NewClient("127.0.0.1")
	var hf []func(hrpc.Call) error
	// 只查询固定的列{cf: [col1, col2]}
	Families :=make(map[string][]string)
	temp :=[]string{"name","age"}
	Families["f1"] = temp
	hf = append(hf, hrpc.Families(Families))
	// f 设定过滤配置
	var f filter.Filter
	// 条件1:限制返回条数
	f = filter.NewPageFilter(100)
	hf = append(hf, hrpc.Filters(f))
	// 条件2:前缀过滤
	var str string = "003"
	//var data []byte = []byte(str)
	f = filter.NewPrefixFilter([]byte(str))
	hf = append(hf, hrpc.Filters(f))
	getRequest, err := hrpc.NewScanStr(context.Background(), "表名",  hf...)
	if err != nil {
				fmt.Println(err.Error())
			}
	scan := client.Scan(getRequest)
	fmt.Println(scan)
	var res []*hrpc.Result
	for {
		getRsp, err := scan.Next()
		if err == io.EOF || getRsp == nil {
			break
		}
		if err != nil {
			log.Print(err)
		}
		res = append(res, getRsp)
	}
	fmt.Println(res)
}

只要不是指定row,就需要使用Scan

原文地址:https://www.cnblogs.com/leimu/p/14668341.html