运行环境
golang 1.13.5
hbase 2.2.5
sdming/goh库,是github中使用golang连接hbase排名第二的库。第一的暂不好用。并非thrift2。
https://github.com/sdming/goh
import "github.com/sdming/goh" address := "192.168.17.129:9090" client, err := goh.NewTcpClient(address, goh.TBinaryProtocol, false) if err != nil { fmt.Println(err) return } if err = client.Open(); err != nil { fmt.Println(err) return } defer client.Close() fmt.Println(client.IsTableEnabled(table)) fmt.Println(client.DisableTable(table)) fmt.Println(client.EnableTable(table)) fmt.Println(client.Compact(table))
最关键的FilterString也好用。
filterString := "(SingleColumnValueFilter('info', 'event_time2', =, 'binary:2020-10-19') AND SingleColumnValueFilter('info', 'event_id', =, 'binary:5381008'))" tScan := goh.TScan{ Columns: []string{"info:event_time2", "info:event_id"}, FilterString: filterString, } id, err := client.ScannerOpenWithScan(tableName, &tScan, nil) if err != nil { panic(err) } defer client.ScannerClose(id) rows, err := client.ScannerGetList(id, 100) if err != nil { panic(err) } for _, row := range rows { //每行数据 print(string(row.Row), " ") for id, column := range row.Columns { //每列 print(id, " ", string(column.Value), " | ") } println("") }
也可以联合查询,具体语法看官网。
http://hbase.apache.org/book.html#thrift
虽然查询不如MYSQL丰富,但毕竟场景不同。
终于找到组织了,折腾了好几天,感谢开源贡献者。