golang hbase数据库基本操作笔记
2018-10-21 15:37
141 查看
HBase是一个面向列的分布式数据库,适合一些需要实时随机地访问超大规模数据集的场合,hbase可以提供高并发读写操作的支持。表是由Key-Value组成的,下面主要介绍一下golang下hbase的一些基本操作。本文用到的库主要有:
“github.com/tsuna/gohbase”
“github.com/tsuna/gohbase/filter”
“github.com/tsuna/gohbase/hrpc”
1、Hbase的连接
var client gohbase.Client func ConnectHBase() { hbaseUrl := beego.AppConfig.String("hbaseHost") user := beego.AppConfig.String("userName") option := gohbase.EffectiveUser(user) client = gohbase.NewClient(hbaseUrl, option) }
2,向表中添加数据
func PutsByRowkey(table, rowKey string, values map[string]map[string][]byte) (err error) { putRequest, err := hrpc.NewPutStr(context.Background(), table, rowKey, values) if err != nil { log4go.Error("hrpc.NewPutStr: %s", err.Error()) } _, err = client.Put(putRequest) if err != nil { log4go.Error("hbase clients: %s", err.Error()) } return }
例如在hbase中建表hbase_table
hbase(main):041:0> create 'hbase_table', {NAME=>'CF1'}, {NAME=>'CF2'}
此表此表中Key为NAME,有两个列族CF1和CF2,其中CF1和CF2下分别有两个列name和gender,Chinese和Math
values := map[string]map[string][]byte{ "CF1": map[string][]byte{ "name": []byte("TigerwolfC"), "gender":[]byte("man")}, "CF2": map[string][]byte{ "Chinese": []byte("99"), "Math": []byte("100")}} PutsByRowkey(table, rowkey, values)
3,更新表中数据
func UpdataHbase(table, rowKey string, values map[string]map[string][]byte) (err error) { putRequest, err := hrpc.NewPutStr(context.Background(), table, rowKey, values) if err != nil { log4go.Error("hrpc.NewPutStr: %s", err.Error()) } res, err := client.Put(putRequest) fmt.Println(res) if err != nil { log4go.Error("hbase clients: %s", err.Error()) } return }
4、查看数据
func Gets(table, rowKey string) (*hrpc.Result, error) { getRequest, err := hrpc.NewGetStr(context.Background(), table, rowKey) if err != nil { log4go.Error("hrpc.NewGetStr: %s", err.Error()) } res, err := client.Get(getRequest) if err != nil { log4go.Error("hbase clients: %s", err.Error()) } defer func() { if errs := recover(); errs != nil { switch fmt.Sprintf("%v", errs) { case "runtime error: index out of range": err = errors.New("NoSuchRowKeyOrQualifierException") case "runtime error: invalid memory address or nil pointer dereference": err = errors.New("NoSuchColFamilyException") default: err = fmt.Errorf("%v", errs) } } }() return res, nil }
5、查看rowkey是否存在
func IsExistRowkey(table, rowKey string) bool { getRequest, err := hrpc.NewGetStr(context.Background(), table, rowKey) if err != nil { log4go.Error("hrpc.NewGetStr: %s", err.Error()) } res, err := client.Get(getRequest) if err != nil { log4go.Error("get from hbase: %s", err.Error()) } if len(res.Cells) > 0 { return true } else { return false } }
6,删除数据
func DeleteByRowkey(table, rowkey string, value map[string]map[string][]byte) (err error) { deleteRequest, err := hrpc.NewDelStr(context.Background(), table, rowkey, value) if err != nil { log4go.Error("hrpc.NewDelStrRef: %s", err.Error()) } //fmt.Println("deleteRequest:", deleteRequest) res, err := client.Delete(deleteRequest) fmt.Println(res) if err != nil { log4go.Error("hrpc.Scan: %s", err.Error()) } return }
按照rowkey删除整条记录可以如下操作
DeleteByRowkey(table, rowkey, nil)
如有不对欢迎指正,相互学习,共同进步。
阅读更多相关文章推荐
- golang redis数据库基本操作笔记
- MYSQL数据库 - 学习笔记1 - 数据库基本操作
- Hbase学习笔记——基本CRUD操作
- Android开发笔记(十四)数据库操作的基本方法
- 学习笔记_JDBC_1_Demo1_连接数据库的基本操作和步骤
- Django 学习笔记(七)数据库基本操作(增查改删)
- 数据库笔记一:数据库的基本操作
- Hbase(nosql)体系结构有基本操作 笔记八
- MySQL 5.6学习笔记(数据库基本操作,查看和修改表的存储引擎)
- ww的笔记之数据库基本操作
- Hbase(nosql)体系结构有基本操作 笔记八
- php读写操作hbase数据库的基本方法
- iOS学习笔记---数据库SQLite3的基本操作并讲内容显示在tableView中
- (1) Mysql ---- ABC 数据库基本操作、数据类型和运算符、函数 《MYSQL 5.5从零开始学》笔记
- MYSQL 学习笔记二 数据库引擎与数据表的基本操作
- PHP学习笔记之三 数据库基本操作
- MySQL学习笔记2:数据库的基本操作
- Django 学习笔记(七)数据库基本操作(增查改删)
- MySQL学习笔记2:数据库的基本操作
- PHP学习笔记之三 数据库基本操作