MST
星途 面试题库

面试题:HBase Shell高级命令之数据批量处理

假设HBase中有一张表存储了大量用户的交易记录,表结构包含列族‘transaction’,列限定符如‘amount’‘time’等。现在需要批量更新所有交易金额大于1000的记录,将其标记为‘high - value’,请使用HBase Shell高级命令实现这一操作,并解释命令执行逻辑。
43.0万 热度难度
数据库Hbase

知识考点

AI 面试

面试题答案

一键面试
  1. 使用 scanput 结合实现
    scan 'your_table_name', {COLUMNS => 'transaction:amount', FILTER => "SingleColumnValueFilter('transaction', 'amount', >=, 'binary:1000')", CACHE => 1000} do |r|
        row_key = r[0]
        put 'your_table_name', row_key, 'transaction:tag', 'high - value'
    end
    
  2. 命令执行逻辑解释
    • scan 'your_table_name', {COLUMNS => 'transaction:amount', FILTER => "SingleColumnValueFilter('transaction', 'amount', >=, 'binary:1000')", CACHE => 1000}
      • scan 是HBase Shell中用于扫描表的命令。
      • your_table_name 是要操作的表名。
      • COLUMNS => 'transaction:amount' 表示只扫描 transaction 列族下的 amount 列。
      • FILTER => "SingleColumnValueFilter('transaction', 'amount', >=, 'binary:1000')" 使用过滤器 SingleColumnValueFilter,它会筛选出 transaction 列族下 amount 列的值大于等于 1000 的记录。这里 binary:1000 表示以二进制格式比较值。
      • CACHE => 1000 表示每次从服务器获取1000条记录,以减少客户端和服务器之间的交互次数,提高扫描效率。
    • do |r|... end:这是Ruby的块语法,对扫描出来的每一条记录 r 执行块内的操作。
    • row_key = r[0]:从扫描的记录 r 中提取行键,HBase中每行数据的第一个元素就是行键。
    • put 'your_table_name', row_key, 'transaction:tag', 'high - value':使用 put 命令,将符合条件的记录(通过行键 row_key 定位)在 transaction 列族下新增一个 tag 列,值为 high - value,从而完成标记操作。

注意:请将 your_table_name 替换为实际的表名。