Nosql 使用HBase外壳扫描HTable行中的特定列值
我想扫描HTable fromhbase shell中的行,其中列族(即Tweet)具有特定值(即用户id) 现在我想找到tweet:user_id有值的所有行Nosql 使用HBase外壳扫描HTable行中的特定列值,nosql,hbase,Nosql,Hbase,我想扫描HTable fromhbase shell中的行,其中列族(即Tweet)具有特定值(即用户id) 现在我想找到tweet:user_id有值的所有行test1,因为该列有值'test1' column=tweet:user_id, timestamp=1339581201187, value=test1 虽然我可以扫描表格中的特定用途 scan 'tweetsTable',{COLUMNS => 'tweet:user_id'} 但我没有找到任何方法来扫描一行以查找值 是否
test1
,因为该列有值'test1'
column=tweet:user_id, timestamp=1339581201187, value=test1
虽然我可以扫描表格中的特定用途
scan 'tweetsTable',{COLUMNS => 'tweet:user_id'}
但我没有找到任何方法来扫描一行以查找值
是否可以通过HBase外壳执行此操作
我也检查过了。来自HBAse shell,我认为这是不可能的,因为我们使用的是类似于查询的方式,希望从中查找特定的数据。正如我们所知,HBAse是noSQL,所以当我们想要应用查询或如果我们有像您这样的案例时,我认为您应该使用Hive或PIG,因为Hive是一种非常好的方法,因为在PIG中,我们需要处理脚本。
无论如何,您可以从这里和
获得有关蜂巢的良好信息 如果您的唯一目的是查看数据,而不是从(任何客户端的)代码中获取数据,那么您可以使用HBase Explorer或新的非常好的产品,但它的beta版是“HBase manager”。您可以从
获取此信息 它很简单,而且更重要的是,它有助于插入和删除数据,像其他DBClient一样,在UI中的列限定符上应用过滤器。试试
我希望它能对您有所帮助:)没有蜂箱也可以:
scan 'filemetadata',
{ COLUMNS => 'colFam:colQualifier',
LIMIT => 10,
FILTER => "ValueFilter( =, 'binaryprefix:<someValue.e.g. test1 AsDefinedInQuestion>' )"
}
扫描“文件元数据”,
{COLUMNS=>'colFam:colQualifier',
极限=>10,
FILTER=>“ValueFilter=,'binaryprefix:'”
}
注意:为了找到所有包含test1作为问题中指定值的行,请在筛选器中使用binaryprefix:test1(有关更多示例,请参阅)Nishu,
这是我定期使用的解决方案。它实际上比你现在需要的强大得多,但我认为你总有一天会使用它的力量。是的,它是针对HBase shell的
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.util.Bytes
scan 'yourTable', {LIMIT => 10, FILTER => SingleColumnValueFilter.new(Bytes.toBytes('family'), Bytes.toBytes('field'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('AAA')), COLUMNS => 'family:field' }
只有family:field
列在应用过滤器的情况下返回。可以改进此过滤器以执行更复杂的比较
这也是我认为最有用的提示:
- -行内扫描解释(Java API)
- -JavaDoc for FilterBase类,带有指向子体的链接,这些子体实际上可以使用相同的样式。好的,shell语法将略有不同,但有了上面的示例,您可以使用它
scan 'tablename' ,
{
FILTER => "SingleColumnValueFilter('column_family','col_name',>, 'binary:1')"
}
表t1中具有d:a\U内容列族的值BIGBLUE的文本搜索示例。扫描表格将显示所有可用值:-
scan 't1'
...
column=d:a_content, timestamp=1404399246216, value=BIGBLUE
...
要仅搜索限制为1的BIGBLUE值,请尝试以下命令:-
scan 't1',{ COLUMNS => 'd:a_content', LIMIT => 1, FILTER => "ValueFilter( =, 'regexstring:BIGBLUE' )" }
COLUMN+CELL
column=d:a_content, timestamp=1404399246216, value=BIGBLUE
显然,取消限制将显示该表中的所有事件/cf.,因为有多个请求解释已发布的额外答案 示例1 如果
扫描“”,{COLUMNS=>'',LIMIT=>3}
将返回:
ROW COLUMN+CELL
ROW1 column=<column>, timestamp=<timestamp>, value=hello_value
ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
ROW COLUMN+CELL
ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
ROW COLUMN+CELL
ROW1 column=<column>, timestamp=<timestamp>, value=hello_value
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
行-列+单元格
行1列=,时间戳=,值=hello\u值
行2列=,时间戳=,值=hello\u值2
行3列=,时间戳=,值=hello\u值3
然后此过滤器:
scan '<table>', { COLUMNS => '<column>', LIMIT => 3, FILTER => "ValueFilter( =, 'binaryprefix:hello_value2') AND ValueFilter( =, 'binaryprefix:hello_value3')" }
scan'',{COLUMNS=>'',LIMIT=>3,FILTER=>ValueFilter(,'binaryprefix:hello_value2')和ValueFilter(,'binaryprefix:hello_value3')”
将返回:
ROW COLUMN+CELL
ROW1 column=<column>, timestamp=<timestamp>, value=hello_value
ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
ROW COLUMN+CELL
ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
ROW COLUMN+CELL
ROW1 column=<column>, timestamp=<timestamp>, value=hello_value
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
行-列+单元格
行2列=,时间戳=,值=hello\u值2
行3列=,时间戳=,值=hello\u值3
示例2
如果不支持,请执行以下操作:
scan '<table>', { COLUMNS => '<column>', LIMIT => 3, FILTER => "ValueFilter( !=, 'binaryprefix:hello_value2' )" }
扫描“”,{COLUMNS=>'',LIMIT=>3,FILTER=>“ValueFilter(!=,'binaryprefix:hello_value2')”}
将返回:
ROW COLUMN+CELL
ROW1 column=<column>, timestamp=<timestamp>, value=hello_value
ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
ROW COLUMN+CELL
ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
ROW COLUMN+CELL
ROW1 column=<column>, timestamp=<timestamp>, value=hello_value
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
行-列+单元格
行1列=,时间戳=,值=hello\u值
行3列=,时间戳=,值=hello\u值3
问题稍有不同,但如果您想查询并非所有行中都存在的特定列,DependentColumnFilter
是您最好的朋友:
import org.apache.hadoop.hbase.filter.DependentColumnFilter
scan 'orgtable2', {FILTER => "DependentColumnFilter('cf1','lan',false,=,'binary:fre')"}
上一次扫描将返回存在
lan
列且其关联值等于fre
的行的所有列。第三个参数是dropDependentColumn
,如果设置为true
@utrecht,则会阻止lan
列本身显示在结果中:您能解释一下“binaryprefix:someValue”的含义吗。一个例子将给出更清晰的解释,@Sudip7 Ok。我添加了。根据表的大小,通常返回结果的速度有多快。是否有不指定列限定符的选项?我需要使用值过滤器搜索数据。可能吗?您好,您是否实际运行了此命令(示例1)?这是错误的。它没有输出您提到的内容。当它在单个列值上检查hello\u value2
和hello\u value3
时,它输出0个结果,这显然不能同时满足这两个条件。@030我使用的是版本1.2.6。您在示例中的表上执行了这个命令吗?因为当与和