设为首页 加入收藏

TOP

'林子雨大数据' 实验3 HBase操作与接口编程(五)
2023-07-23 13:30:32 】 浏览:112
Tags:' 林子雨 实验 HBase
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) } image-20230402192304242 image-20230403002632464

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函数接口调用做准备。

image-20230402192533871

{
    "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([]
首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go map 竟然也会发生内存泄漏? 下一篇好用的在线客服系统Go语言源码-GO..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目