【问题标题】:Simple integer comparison in HBaseHBase 中的简单整数比较
【发布时间】:2017-02-17 00:25:54
【问题描述】:

我正在 HBase 中尝试一个非常简单的示例。以下是我创建表格和放置数据的方式:

create 'newdb3','data'
put 'newdb3','row1','data:name','Thexxx Beatles'
put 'newdb3','row2','data:name','The Beatles'
put 'newdb3','row3','data:name','Beatles'
put 'newdb3','row4','data:name','Thexxx'
put 'newdb3','row1','data:duration',400
put 'newdb3','row2','data:duration',300
put 'newdb3','row3','data:duration',200
put 'newdb3','row4','data:duration',100

scan 'newdb3', {COLUMNS => 'data:name', FILTER => "SingleColumnValueFilter('data','duration', > ,'binaryprefix:200')"}

但结果始终是全部 4 列。我尝试了带或不带字符串的数字,并使用十六进制值。我还尝试了“二进制”而不是“二进制前缀”。如何在 hbase 中存储和比较整数?

【问题讨论】:

    标签: hadoop hbase phoenix


    【解决方案1】:

    这会产生预期的输出吗?

    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 'newdb3', { FILTER => SingleColumnValueFilter.new(Bytes.toBytes('data'), \
        Bytes.toBytes('duration'), 
        CompareFilter::CompareOp.valueOf('GREATER'), \
        BinaryComparator.new(Bytes.toBytes('200'))) }
    

    注意:这将进行二进制比较,对于数字,它仅在它们被 0 填充时才有效

    【讨论】:

    • 我正在尝试使用填充来实现相同的目的。我的列值为 Long(System.currentTimeMillis())。所以我的问题是我怎么知道要完成多少填充?欢迎任何答案,并提前致谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    相关资源
    最近更新 更多