当前位置: 首页 > 知识库问答 >
问题:

HBase:HBase如何知道一行是否包含特定的列

松英喆
2023-03-14

HBase如何知道一行是否包含特定的列?例如,考虑以下情况:

    null
Scan s = new Scan();
s.setStartRow ( Bytes.toBytes(“R1”) );
s.setStopRow ( Bytes.toBytes(“R2”) );
s.addColumn( STAT_FAM, Bytes.toBytes(“S500”) );
s.addColumn( STAT_FAM, Bytes.toBytes(“S2500”) );

提前感谢!

共有1个答案

吴唯
2023-03-14

Hfile的KeyValue由以下内容组成:

<keylength> <valuelength> <key> <value>

键分解为:

<rowlength> <row> <columnfamilylength> <columnfamily> <columnqualifier> <timestamp> <keytype>

它将在一起

<keylength> <valuelength> <key> <rowlength> <row> <columnfamilylength> <columnfamily> <columnqualifier> <timestamp> <keytype> <value>

类名:org.apache.hadoop.hbase.filter.SingleColumnValueFilter

if (!keyValue.matchingColumn(this.columnFamily, this.columnQualifier)) {
      return ReturnCode.INCLUDE;
    }

if (filterColumnValue(keyValue.getBuffer(), keyValue.getValueOffset(), keyValue.getValueLength())) {
      return this.latestVersionOnly? ReturnCode.NEXT_ROW: ReturnCode.INCLUDE;
}

和org.apache.hadoop.hbase.KeyValue类。

  /**
   *
   * @param family column family
   * @param qualifier column qualifier
   * @return True if column matches
   */
  public boolean matchingColumn(final byte[] family, final byte[] qualifier) {
    int rl = getRowLength();
    int o = getFamilyOffset(rl);
    int fl = getFamilyLength(o);
    int ql = getQualifierLength(rl,fl);
    if (!Bytes.equals(family, 0, family.length, this.bytes, o, fl)) {
      return false;
    }
    if (qualifier == null || qualifier.length == 0) {
      if (ql == 0) {
        return true;
      }
      return false;
    }
    return Bytes.equals(qualifier, 0, qualifier.length,
        this.bytes, o + fl, ql);
  }


Image credit: Cloudera-blog
 类似资料:
  • 问题内容: 如何知道一个字符串是否包含重音? 问题答案: 在列表中添加您想要的任何重音

  • 问题内容: 我正在尝试确定Pandas列中是否有一个具有特定值的条目。我试图用来做到这一点。我以为这是行得通的,除非当我向它提供一个我不知道的值时,它仍然返回。当我将一个子集添加到仅包含与缺少的ID匹配的条目的数据框时,显然其中没有条目。如何确定Pandas数据框中的列是否包含特定值,为什么我的当前方法不起作用?)。 问题答案: Series的值检查值是否在索引中: 一种选择是查看它是否具有唯一值

  • 问题内容: 控制台说“假”。我有一个ArrayList,我无法检查它是否包含特定的String数组。怎么办,为什么? 问题答案: 使用方法实现检查对象是否相等。但是,对于数组,等效于引用相等。即翻译为。 在上面,传递给方法的将创建一个 新 数组,该数组与最初添加到中的数组不同。 一种检查方法是遍历中的每个数组,并使用以下命令检查是否相等: 另一种方法是从Apache 使用。

  • 我想找到属性中的是否包含某个值。然后我想获取包含该值的条目的索引。

  • 下面是我要做的:我有一些,如果列表包含特定字符串,我想打印一条语句,否则抛出一个异常,但当我尝试以下代码时 它遍历列表,在处,它显然找到“apple”,并立即转到块并抛出异常。我也试过下面的,但这也不起作用。 有没有一个简单的方法来做我想做的事情?

  • 问题内容: 我在Java中使用DOM表示形式 如何区分xml标记中是否包含值或是否包含另一个嵌入式标记?例如,我可以拥有: 要么 我想做以下 如何写条件1? 问题答案: 您可以通过遍历子节点列表来测试每个子节点: 然后condition1是。 或者,您可以使用实施测试。但是,如果 是 子元素,这种方法会遍历整个片段您正在测试,并分配大量内存。