zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SpringBoot进入debug模式
    windows上安装ElasticSearch
    Python操作Redis
    JVM: OOP模型 & 对象内存结构 & 计算对象大小 & 指针压缩 & 预估调优
    JVM:执行引擎&JIT&逃逸分析
    man -k或apropos报nothing appropriate解决办法
    JVM:String底层
    JVM: 内存模型
    JVM: 字节码解析
    mac不能启动finder的解决方案
  • 原文地址:https://www.cnblogs.com/leimu/p/14668341.html
Copyright © 2011-2022 走看看