运行环境
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丰富,但毕竟场景不同。
终于找到组织了,折腾了好几天,感谢开源贡献者。

