【问题标题】:Google Cloud Bigtable: query partial keysGoogle Cloud Bigtable:查询部分键
【发布时间】:2016-11-23 16:39:56
【问题描述】:

所以如果我在 Bigtable 中有以下数据:

DEL_6878 .....
DEL_6879 .....
BOM_5876 .....
SFO_8686 .....
SFO_8687 .....

如何查询 SFO* 记录?我阅读了文档;我知道如何获得单行;类似的东西:

table.get("SFO_8686");

或者如何获取范围;类似getRows("SFO_8686", "SFO _8687") 的东西包含startKeyendKey,但我在文档中阅读并相信可以获取以前缀开头的记录; SFO* 示例。我该怎么做?

【问题讨论】:

    标签: google-cloud-bigtable


    【解决方案1】:

    根据我的经验,PrefixFilter 适用于部分行键 * 样式的扫描,并且从我设法挖掘出来的内容中,除此之外设置开始行和结束行应该可以提高性能(大概是通过避免完全扫描):

    PrefixFilter px = new PrefixFilter(Bytes.toBytes(rowKey));
    Scan s = new Scan();
    s.setStartRow(Bytes.toBytes(rowKey));
    s.setFilter(px);
    ...
    

    另外,根据我从这次讨论中了解到的情况: HBase (Easy): How to Perform Range Prefix Scan in hbase shell , 在 shell 环境中,'ROWPREFIXFILTER' 是为了结合上面的两个元素:

    scan 'TableName', {ROWPREFIXFILTER => 'SFO'}
    

    但我还没有设法找到与之类似的 java,如果这就是你所追求的。如果其他人有的话会很有帮助!

    【讨论】:

      【解决方案2】:

      我认为运行带有范围的扫描是您最有效的选择。您还可以使用org.apache.hadoop.hbase.filter.RowFilterRegexStringComparator 进行扫描。

      【讨论】:

      • 文档特别说明我可以使用 SFO* 类型的操作进行查询。如果键由多个数据点组成,并且在查询时我只知道部分键的值,即 SFO 部分,那么我什至如何制定开始和结束?
      • 哦..你的意思是“SFO_”是一个明显的开始,但不清楚结束键应该是什么?也许 byte[] bytes = "SFO_".getBytes();字节[bytes.length-1] = (byte) (bytes[bytes.length-1] + 1);我不确定。
      • 您最简单的解决方案可能是使用 PrefixFilter 进行扫描。我将做一个笔记来加强我们的时间序列用例示例。
      • 您绝对可以使用开始和结束键进行扫描。我不知道它是否进行全表扫描。
      • 我已将您的反馈发送给团队。
      猜你喜欢
      • 2020-04-14
      • 2022-01-12
      • 1970-01-01
      • 2019-05-19
      • 2017-01-30
      • 2018-04-05
      • 2018-02-16
      • 2018-11-08
      • 2016-05-22
      相关资源
      最近更新 更多