V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nthin0
V2EX  ›  Java

求助,用 Java api 怎样快速判断 hbase 里模糊匹配的 rowkey 是否存在

  •  
  •   nthin0 · 2020-09-07 19:33:59 +08:00 · 2229 次点击
    这是一个创建于 1569 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • rowkey 的数量在几十万到百万左右
    • 方案一:遍历生成所有的 rowkey,再用 table.existsAll(gets)可以判断 rowkey 是否存在,但是较慢
    • 方案二:用 scan 可以模糊匹配 rowkey,但是会把所有的数据都查出来,还是比较慢。。
    Scan scan = new Scan();
    scan.setStartRow(Bytes.toBytes(startRow));
    scan.setStopRow(Bytes.toBytes(stopRow));
    
    • 有没有把两种效果结合起来的方法,模糊匹配 rowkey 是否存在,比如 rowkey 的格式是 12345$yyyyMMddHHmmss,67890$yyyyMMddHHmmss

    • 能通过传入 12345 就快速判断 hbase 中是否有 rowkey 以 12345 开头的数据

    • 总之就是 快速 足够快 特别快

    • 谢谢各位大佬了!!!

    5 条回复    2020-09-08 23:27:20 +08:00
    nthin0
        1
    nthin0  
    OP
       2020-09-07 20:17:29 +08:00
    没有大佬帮忙看一下吗~~
    yanshenxian
        2
    yanshenxian  
       2020-09-07 23:13:07 +08:00
    thinkmore
        3
    thinkmore  
       2020-09-08 18:05:33 +08:00
    @nthin0 可以使用 prefixFilter 试一试,比如

    ```
    scan 'yourTable',{LIMIT=>10,FILTER=>"PrefixFilter('123456')"}
    ```

    或者 RowFilter

    ```
    scan 'your_table',{FILTER=>"RowFilter(=,'substring:123456')"}
    ```
    thinkmore
        4
    thinkmore  
       2020-09-08 18:09:16 +08:00   ❤️ 1
    @nthin0 在我的 blog https://generalthink.github.io/2018/12/17/hbase-scan-command/ 中可以看到 scan 的更多命令
    nthin0
        5
    nthin0  
    OP
       2020-09-08 23:27:20 +08:00
    @thinkmore 感谢!我研究一下这些 filter
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3143 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:39 · PVG 20:39 · LAX 04:39 · JFK 07:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.