Hadoop 如何在hbase中查找行键内的列数

Hadoop 如何在hbase中查找行键内的列数,hadoop,hbase,Hadoop,Hbase,如何在hbase中查找行键中的列数(因为一行可以有许多列)我认为没有直接的方法可以做到这一点,因为每行可以有不同的列数,并且它们可能分布在多个文件中 如果不希望将整行带到客户端执行计数,则可以编写端点协处理器(如果愿意,可以编写存储过程的HBase版本)在区域服务器端执行计算,并仅返回结果。您可以阅读一些关于协处理器的内容,有一个简单的方法: 使用hbase shell扫描表格并将输出写入中间文本文件。由于hbase外壳输出将一行的每一列拆分为一行,因此我们只需计算文本文件中的行数(减去前6行,

如何在hbase中查找行键中的列数(因为一行可以有许多列)

我认为没有直接的方法可以做到这一点,因为每行可以有不同的列数,并且它们可能分布在多个文件中

如果不希望将整行带到客户端执行计数,则可以编写端点协处理器(如果愿意,可以编写存储过程的HBase版本)在区域服务器端执行计算,并仅返回结果。您可以阅读一些关于协处理器的内容,有一个简单的方法:

使用hbase shell扫描表格并将输出写入中间文本文件。由于hbase外壳输出将一行的每一列拆分为一行,因此我们只需计算文本文件中的行数(减去前6行,即hbase外壳标准输出和最后2行)

确保选择适当的行键,因为边框不包括在内


如果您只对特定列(族)感兴趣,请应用上面hbase shell命令中的筛选器(例如FamilyFilter、ColumnRangeFilter等)。

感谢@user3375803,实际上您不必使用外部txt文件。因为我不能对你的答案发表评论,所以我将我的答案留在下面:

echo "scan 'mytable', {STARTROW=>'mystartrow', ENDROW=>'myendrow'}" | hbase shell | wc -l | awk '{print $1-8}'

你能解释一下你的代码以及它是如何回答这个问题的吗?前两条管道与@user3375803的答案相同。第三个管道“wc-l”可以在没有外部txt文件的情况下获得行号,而第四个管道“awk'{print$1-8}'”的目标是获得第三个管道的结果减去8(前6行和后2行不是原始答案所说的列)
echo "scan 'mytable', {STARTROW=>'mystartrow', ENDROW=>'myendrow'}" | hbase shell | wc -l | awk '{print $1-8}'