tring][]byte)
item[colFamily][col] = []byte{}
fmt.Println(item)
t, err := hrpc.NewDelStr(context.Background(), table, rowKey, item)
checkError(err, c)
res, err := variable.Client.Delete(t)
checkError(err, c)
c.JSON(200, res)
}
1.4 清空指定表的所有数据
HBase Shell 对应代码
truncate 'course'
没找到清空所有数据的hrpc函数,只能先拿到scanner再执行rowKey的每条删除。
如果是delete表操作需要先disable表,再删除表。
func TableTruncate(c *gin.Context) {
table := c.Query("table")
// ^ 下方注释代码是 Table Delete
// t := hrpc.NewDisableTable(context.Background(), []byte(table))
// err := variable.AdminClient.DisableTable(t)
// checkError(err, c)
// t2 := hrpc.NewDeleteTable(context.Background(), []byte(table))
// err = variable.AdminClient.DeleteTable(t2)
t2, err := hrpc.NewScan(context.Background(), []byte(table))
checkError(err, c)
res := variable.Client.Scan(t2)
row, err := res.Next()
for err != io.EOF && row != nil {
t, err := hrpc.NewDelStr(context.Background(), table, string(row.Cells[0].Row), nil)
checkError(err, c)
_, err = variable.Client.Delete(t)
checkError(err, c)
row, err = res.Next()
}
c.JSON(200, gin.H{"result": "删除成功"})
}
1.5 统计表的行数
HBase Shell 对应代码
count 'course'
修改1.2的代码
func ShowTableRowsCount(c *gin.Context) {
var count int
t, err := hrpc.NewScan(context.Background(), []byte(c.Query("table")))
checkError(err, c)
res := variable.Client.Scan(t)
row, err := res.Next()
for err != io.EOF && row != nil {
count++
row, err = res.Next()
}
c.JSON(200, count)
}
localhost:1313/TableRowsCount?table=course 测试结果
3
3.1 创建表
func TableCreate(c *gin.Context) {
table := c.PostForm("table")
fs := c.PostForm("fields")
var fields []string
// fmt.Println(table, fs)
err := json.Unmarshal([]byte(fs), &fields)
checkError(err, c)
// 验证是否存在表
flag := false
t, err := hrpc.NewListTableNames(context.Background())
checkError(err, c)
res, err := variable.AdminClient.ListTableNames(t)
checkError(err, c)
for _, v := range res {
if string(v.GetQualifier()) == table {
flag = true
}
}
// 如存在删除表
if flag {
t := hrpc.NewDisableTable(context.Background(), []byte(table))
err := variable.AdminClient.DisableTable(t)
checkError(err, c)
t2 := hrpc.NewDeleteTable(context.Background(), []byte(table))
err = variable.AdminClient.DeleteTable(t2)
checkError(err, c)
}
// 插入新表
var items map[string]map[string]string = make(map[string]map[string]string)
for _, v := range fields {
items[v] = make(map[string]string)
}
t2 := hrpc.NewCreateTable(context.Background(), []byte(table), items)
err = variable.AdminClient.CreateTable(t2)
checkError(err, c)
c.JSON(200, gin.H{"result": "创建成功"})
}
通过1.1函数接口我们可知test表已经存在,现在我们使用3.1函数接口重新创建该表,并为接下来的3.2函数接口调用做准备。
{
"result": "创建成功"
}
3.2 新增记录
为了增强健壮性,我们需要判断传入的fields、values参数个数是否一致,否则应当主动报错。
func TableInsertRow(c *gin.Context) {
table := c.PostForm("table")
rowKey := c.PostForm("rowKey")
fs := c.PostForm("fields")
vs := c.PostForm("values")
var fields []string
var values []string
err := json.Unmarshal([]byte(fs), &fields)
checkError(err, c)
err = json.Unmarshal([]