bel*_*oky 4 database hbase jruby bigdata nosql
我正在寻找一个HBase shell命令,它将计算指定列族中的记录数.我知道我可以跑:
echo "scan 'table_name'" | hbase shell | grep column_family_name | wc -l
Run Code Online (Sandbox Code Playgroud)
但是这将比标准计数命令运行得慢得多:
count 'table_name' , CACHE => 50000 (because the use of the CACHE=>50000)
Run Code Online (Sandbox Code Playgroud)
更糟糕的是 - 它没有返回实际的记录数,而是返回指定列族中的单元格总数(如果我没有弄错?).我需要这样的东西:
count 'table_name' , CACHE => 50000 , {COLUMNS => 'column_family_name'}
Run Code Online (Sandbox Code Playgroud)
迈克尔,提前谢谢
这是我在需要的时候编写的Ruby代码.提供适当的评论.它为您提供HBaseshell count_table命令.第一个参数是表名,第二个是属性数组,与scanshell命令相同.
直接回答你的问题是
count_table 'your.table', { COLUMNS => 'your.family' }
Run Code Online (Sandbox Code Playgroud)
我还建议添加缓存,例如扫描:
count_table 'your.table', { COLUMNS => 'your.family', CACHE => 10000 }
Run Code Online (Sandbox Code Playgroud)
在这里你来源:
# Argiments are the same as for scan command.
# Examples:
#
# count_table 'test.table', { COLUMNS => 'f:c1' }
# --- Counts f:c1 columsn in 'test_table'.
#
# count_table 'other.table', { COLUMNS => 'f' }
# --- Counts 'f' family rows in 'other.table'.
#
# count_table 'test.table', { CACHE => 1000 }
# --- Count rows with caching.
#
def count_table(tablename, args = {})
table = @shell.hbase_table(tablename)
# Run the scanner
scanner = table._get_scanner(args)
count = 0
iter = scanner.iterator
# Iterate results
while iter.hasNext
row = iter.next
count += 1
end
# Return the counter
return count
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3807 次 |
| 最近记录: |