【HBase入门】6. 常用 Shell 操作(3)

news2025/1/15 12:43:06

前言

我们可以以shell的方式来维护和管理HBase。例如:执行建表语句、执行增删改查操作等等。

过滤器的用法

过滤器一般结合scan命令来使用。打开HBase的JAVA API文档。找到RowFilter的构造器说明,我们来看以下,HBase的过滤器该如何使用。
scan '表名', { Filter => "过滤器(比较运算符, '比较器表达式')” }

比较运算符

比较运算符描述
=等于
>大于
>=大于等于
<小于
<=小于等于
!=不等于

比较器

比较器描述
BinaryComparator匹配完整字节数组
BinaryPrefixComparator匹配字节数组前缀
BitComparator匹配比特位
NullComparator匹配空值
RegexStringComparator匹配正则表达式
SubstringComparator匹配子字符串

比较器表达式

基本语法:比较器类型:比较器的值

比较器表达式语言缩写
BinaryComparatorbinary:值
BinaryPrefixComparatorbinaryprefix:值
BitComparatorbit:值
NullComparatornull
RegexStringComparatorregexstring:正则表达式
SubstringComparatorsubstring:值

需求一:使用RowFilter查询指定订单ID的数据

  • 需求
    只查询订单的ID为:02602f66-adc7-40d4-8485-76b5632b5b53、订单状态以及支付方式

  • 分析
    1.因为要订单ID就是ORDER_INFO表的rowkey,所以,我们应该使用rowkey过滤器来过滤
    2.通过HBase的JAVA API,找到RowFilter构造器
    在这里插入图片描述
    通过上图,可以分析得到,RowFilter过滤器接受两个参数,

    op——比较运算符
    rowComparator——比较器

    所以构建该Filter的时候,只需要传入两个参数即可

  • 命令
    scan 'ORDER_INFO', {FILTER => "RowFilter(=,'binary:02602f66-adc7-40d4-8485-76b5632b5b53')"}

需求二:查询状态为已付款的订单

  • 需求
    查询状态为「已付款」的订单

  • 分析
    1.因为此处要指定列来进行查询,所以,我们不再使用rowkey过滤器,而是要使用列过滤器
    2.我们要针对指定列和指定值进行过滤,比较适合使用SingleColumnValueFilter过滤器,查看JAVA API
    在这里插入图片描述
    需要传入四个参数:

    列簇
    列标识(列名)
    比较运算符
    比较器

    注意:
    列名STATUS的大小写一定要对!此处使用的是大写!
    列名写错了查不出来数据,但HBase不会报错,因为HBase是无模式的

  • 命令
    scan 'ORDER_INFO', {FILTER => "SingleColumnValueFilter('C1', 'STATUS', =, 'binary:已付款')", FORMATTER => 'toString'}

需求三:查询支付方式为1,且金额大于3000的订单

  • 分析

    1. 此处需要使用多个过滤器共同来实现查询,多个过滤器,可以使用AND或者OR来组合多个过滤器完成查询
    2. 使用SingleColumnValueFilter实现对应列的查询
  • 命令

    1. 查询支付方式为1
      SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1')
    2. 查询金额大于3000的订单
      SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:3000')
    3. 组合查询
      scan 'ORDER_INFO', {FILTER => "SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1') AND SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:3000')", FORMATTER => 'toString'}
  • 注意:
    HBase shell中比较默认都是字符串比较,所以如果是比较数值类型的,会出现不准确的情况。例如:在字符串比较中4000是比100000大的

INCR

  • 需求
    某新闻APP应用为了统计每个新闻的每隔一段时间的访问次数,他们将这些数据保存在HBase中。
    该表格数据如下所示:

    新闻ID访问次数时间段ROWKEY
    00000000011200:00-01:000000000001_00:00-01:00
    00000000021201:00-02:000000000002_01:00-02:00

    要求:原子性增加新闻的访问次数值。

  • incr操作简介
    incr可以实现对某个单元格的值进行原子性计数。语法如下:
    incr '表名','rowkey','列蔟:列名',累加值(默认累加1)

    • 如果某一列要实现计数功能,必须要使用incr来创建对应的列
    • 使用put创建的列是不能实现累加的
  • 导入测试数据
    在这里插入图片描述
    该脚本创建了一个表,名为NEWS_VISIT_CNT,列蔟为C1。并使用incr创建了若干个计数器,每个rowkey为:新闻的编号_时间段。CNT为count的缩写,表示访问的次数。
    hbase shell /export/software/NEWS_VISIT_CNT.txt scan 'NEWS_VISIT_CNT', {LIMIT => 5, FORMATTER => 'toString'}

  • 需求一:对0000000020新闻01:00 - 02:00访问计数+1

    1. 获取0000000020这条新闻在01:00-02:00当前的访问次数
      get_counter 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'
      此处,如果用get获取到的数据是这样的:

    base(main):029:0> get ‘NEWS_VISIT_CNT’,‘0000000020_01:00-02:00’,‘C1:CNT’
    COLUMN CELL
    C1:CNT timestamp=1599529533072, value=\x00\x00\x00\x00\x00\x00\x00\x06
    1 row(s)
    Took 0.0243 seconds

    1. 使用incr进行累加
      incr 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'

    2. 再次查看新闻当前的访问次数
      get_counter 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速排序的实现和优化~

相比于冒泡排序的改进点&#xff1a; 在前面学过的冒泡排序中&#xff0c;由于扫描过程只对相邻的两个元素进行比较&#xff0c;因此在互换两个相邻元素时&#xff0c;只能消除一个逆序&#xff0c;如果能通过两个(不相邻的)元素的交换&#xff0c;消除待排序记录 中的多个逆序…

docker desktop window10家庭版踩坑实录

安装 桌面版&#xff1a;https://www.docker.com/products/docker-desktop 这里我就安装的是桌面版 选择windows 前置工作 1.按下 wins&#xff08;找到这个&#xff09; 将下面的这个勾选中&#xff0c;如果你是家庭版很可能没有这个东西&#xff0c;那么请看我的这篇文章…

5-5中央处理器-指令流水线

文章目录一.基本概念1.多条指令在处理器中的执行方式&#xff08;1&#xff09;顺序执行方式/串行执行方式&#xff08;2&#xff09;流水线执行方式①一次重叠执行方式②二次重叠执行方式2.流水线的表示方法&#xff08;时空图&#xff09;3.超标量流水线二.分类1.部件功能级、…

第四十五章 动态规划——背包问题模型(二)

一、概述 我们在上一章中已经对背包模型做了一定地讲解&#xff0c;但是我们发现其实在上一章节中我们所介绍的例题大部分是给背包问题套上一个背景&#xff0c;当我们识破了背后的模型后&#xff0c;我们就可以直接套用模板&#xff0c;基本不需要对代码做改变。 那么在这一…

SpringBoot读写Redis客户端并实现技术切换(Jedis)

SpringBoot整合Redishttps://blog.csdn.net/weixin_51882166/article/details/128759780?spm1001.2014.3001.5501 读写客户端 首先应该打开redis服务&#xff1b; cd命令进入Redis安装目录下&#xff1a; 进入Redis客户端&#xff1a; redis-cli.exe -h 127.0.0.1 -p 6379…

梯度下降算法有哪些?有什么区别?【背景、原理、公式、代码】

一、梯度下降算法背景 梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯…

行为型模式-职责链模式

1.概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门负责人、副总经理、总经理等&#xff0c;但每个领导能批准的天数不同…

记一段相亲反思

记一段相亲反思项目系统启动项目相亲需求的细分高净值人群特定类型的高预期结婚结婚前的彩礼引流系统启动流量&#xff0c;从哪里来&#xff1f;作弊避险&#xff0c;什么钱不能赚&#xff1f;这不是一篇找对象的文章&#xff0c;而是帮别人找对象来赚钱的文章。 项目系统 启…

洛谷-P2114 [NOI2014] 起床困难综合症

题目链接: P2114 [NOI2014] 起床困难综合症 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述: 21 世纪&#xff0c;许多人得了一种奇怪的病&#xff1a;起床困难综合症&#xff0c;其临床表现为&#xff1a;起床难&#xff0c;起床后精神不佳。作为一名青春阳光好少…

Bayesian Personalized Ranking from Implicit Feedback 阅读笔记

Abstract BPR主要用于基于隐式反馈(implicit feedback)的Item Recommendation。 尽管有很多做同样事情的算法比如matrix factorization&#xff0c; knearest-neighbor。但他们并不是直接对于物品排名本身进行预测的。 而BPR则是通过贝叶斯分析得到最大的后验估计量来预测排…

基于蜣螂算法优化概率神经网络PNN的分类预测-附代码

基于蜣螂算法优化概率神经网络PNN的分类预测 - 附代码 文章目录基于蜣螂算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立3.基于蜣螂优化的PNN网络5.测试结果6.参考文献7.Matlab代码摘要&#xff1a;针对PNN神经网络的光滑因…

[GYCTF2020]EasyThinking (ThinkPHP V6.0.0)

[GYCTF2020]EasyThinking 打开以后就注册一些功能&#xff0c;注册admin admin&#xff0c;成功然后尝试search这个方法是否有任意文件读取漏洞&#xff0c;试了试没有任何的回显。 然后个人中心&#xff0c;显示的是自己的历史命令 接下来&#xff0c;呃呃呃就没思路了&…

DFS(五)N皇后

51. N 皇后 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案…

★ 我的世界各类奇葩武器实现!(命令方块1.13+)

新版execute一出很多玩家都不会了。开头先给大家说一下怎么以旧换新&#xff1a; e.g. 旧版&#xff1a; /execute e[typearrow] ~ ~ ~ summon tnt 新版就改为&#xff1a; /execute at e[typearrow] run summon tnt 非常简单&#xff01; 注记 以下代码块里的命令未经表明一…

Mysql入门技能树-数据类型

数值的隐式类型转换 Joe 需要使用下列表做一项数值计算 create table points(id int primary key auto_increment,x int,y int );计算查询为&#xff1a; select id, (x^2 y^2)/2 as result from points; 得到的结果集中&#xff0c;result 列的类型应该是&#xff1a; 答…

剑指Offer 第1天 第2天

第 1 天 栈与队列&#xff08;简单&#xff09; 剑指 Offer 09. 用两个栈实现队列 class CQueue { public: CQueue() {} void appendTail(int value) { s1.push(value); } int deleteHead() { while(!s1.empty()) { …

AtCoder Regular Contest 154 C. Roller(思维题)

题目 T(T<5e3)组样例&#xff0c;每次给定一个数n(n<5e3)&#xff0c; 和长为n的两个数组a,b&#xff0c;你可以执行以下操作任意次&#xff1a; 操作&#xff1a;选择一个下标i(1<i<n)&#xff0c;将替换为&#xff0c;其中被认为是 问若干次操作后&#xff0…

JUC面试(十)——线程池Callable接口

线程池&Callable接口 前言 获取多线程的方法&#xff0c;我们都知道有三种&#xff0c;还有一种是实现Callable接口 实现Runnable接口实现Callable接口实例化Thread类使用线程池获取 Callable接口 这是一个函数式接口&#xff0c;因此可以用作lambda表达式或方法引用的…

JDBC连接池多线程通过CountDownLatch实现线程并发执行

目录 1.连接池 1.1 什么是连接池 1.2 为什么使用连接池 1.3 连接池的工作原理 1.4我们如何手写【难点】 1.4.1编写说明 1.4.2 创建jdbc.properties 1.4.3 封装一个连接类 1.4.4 创建一个连接池接口 1.4.5 创建一个连接池实现类以及对应方法 1.4.6 创建一个连接池的维…

spingboot如何接受前端请求

首先我们是否用的是rest风格开发的的都是适用的.普通参数get 请求发送方注:由于是get请求不用body(json)接收.接受方post请求发送端注意:在请求体(body)里面用x-www-from-urlencoded(不仅可以发请求,还可以发文件)接受体没有5种不同参数类型的传递普通参数[简单数据]&#xff1…