Table Store は、サービス側で読み取り結果を再フィルタリングして、ネットワーク上で送信されるデータ量を制限することができます。

ツリー構造フィルタの内部ノードは論理演算子 (CompositeColumnCondition) で、そのリーフノードは比較演算子 (SingleColumnCondition) です。

  • CompositeColumnCondition は、ANDOR および NOT をサポートします。 AND および OR に複数のサブノードをマウントできます。 NOT にマウントできるノードは1つだけです。

  • SingleColumnCondition は、6つすべての比較条件 (EQUAL TO、NOT EQUAL TO、GREATER THAN、LESS THAN、GREATER THAN OR EQUAL TO、LESS THAN OR EQUAL TO) をすべてサポートします。

  • 各 SingleColumnCondition オブジェクトは、列 (プライマリキー列にすることができます) と定数との比較をサポートします。 2 つの列または 2 つの定数を比較することはサポートされていません。

  • SingleColumnCondition の latestVersionOnly パラメーターは、列値の複数のバージョンを比較に含める方法を制御します。 デフォルト値は "true" です。

    • true の場合、指定されたバージョンの範囲内にある最新の列値のみが比較に含まれます。 (これらの列値は比較にのみ関係します。 フィルタがこの行を受け入れる場合でも、他のバージョンの列値が返されます。)

    • false の場合、いずれかの列値が条件を満たすと、ノードはそれを true と見なします。

  • SingleColumnCondition の passIfMissing パラメーターは、列値が欠落している場合にノードが考慮する値を制御します。 デフォルト値は "false" です。

フィルタは他の条件付きフィルタの結果に作用します。 したがって、フィルター内の列が指定された読み取り列に指定されていない場合、またはバージョンの範囲内に列値が存在しない場合、フィルターはこの列が欠落していると見なします。

次の例では、プライマリキー列 pkey が 1 より大きく、属性列 attr が "A" に等しいという条件を満たすすべての行をテーブルから除外します。

RangeQueryCriterion query;
query.mutableTable() = kTableName;
query.mutableMaxVersions().reset(1);
{
  PrimaryKey& start = query.mutableInclusiveStart();
  start.append() = PrimaryKeyColumn(
      "pkey",
      PrimaryKeyValue::toInfMin());
}
{
  PrimaryKey& end = query.mutableExclusiveEnd();
  end.append() = PrimaryKeyColumn(
      "pkey",
      PrimaryKeyValue::toInfMax());
}
{
  // フィルタを設定します。
  shared_ptr<ColumnCondition> pkeyCond(
      new SingleColumnCondition(
          "pkey",
          SingleColumnCondition::kLarger,
          AttributeValue::toInteger(1)));
  shared_ptr<ColumnCondition> attrCond(
      new SingleColumnCondition(
          "attr",
          SingleColumnCondition::kEqual,
          AttributeValue::toStr("A")));
  shared_ptr<CompositeColumnCondition> top(new CompositeColumnCondition());
  top->mutableOp() = CompositeColumnCondition::kAnd;
  top->mutableChildren().append() = pkeyCond;
  top->mutableChildren().append() = attrCond;
  query.mutableFilter() = top;
}