フィルタ
Bigtable からデータを読み取る場合は、特定の行または行の範囲を読み取ることができます。ただし、すべての行のすべてのデータを必要としない場合も考えられます。行キーに特定の値を含む行、または特定の列ファミリー内のセルのみが必要な場合があります。
読み取りリクエストの結果を制限するには、リクエストにフィルタを含めます。レスポンスが送信される前にデータにフィルタが適用され、返されるデータの量が削減されます。そのため、フィルタを使用することでネットワーク コストを削減し、スループットを高めることができます。このページでは、Bigtable フィルタの仕組みの概要と使用可能なフィルタの一覧を示します。
各フィルタの詳細とコードサンプルについては、フィルタの例をご覧ください。
フィルタの仕組み
読み取りリクエストにフィルタが含まれている場合、Bigtable はテーブルから行または行の範囲を取得します。Bigtable は、取得した各入力行について、フィルタを使用して行を評価し、フィルタ結果に基づいて出力行を生成します。
Bigtable には、以降のセクションで説明するように、いくつかのタイプのフィルタが用意されています。基本フィルタは、制限と変更の 2 つのカテゴリに分類されます。基本フィルタを組み合わせて合成フィルタを作成できます。
ほとんどの場合、フィルタを適用する行キー、行範囲、または行数を指定しない限り、フィルタはすべての行に適用されます。ただし、行キーの正規表現フィルタは例外です。このフィルタは、正規表現が固定の接頭辞のときに、行範囲を制限する場合があります。一般に、テーブル全体のスキャンの速度低下を回避するため、フィルタの行を必ず指定します。
制限フィルタ
制限フィルタは、特定の条件に一致するかどうかに基づいて、レスポンスに含める行またはセルを制御します。たとえば、行キーが正規表現と一致する行のみ、または特定の列ファミリーのセルのみをレスポンスに含めることができます。
多くの制限フィルタでは、出力行からセルを除外できます。すべてのセルが出力行から除外されている場合、行はレスポンスに含まれません。
制限フィルタの全一覧については、フィルタの概要をご覧ください。
変更フィルタ
変更フィルタは、個別のセルのデータまたはメタデータに影響します。
Bigtable には、次の変更フィルタが用意されています。
値を削除フィルタ。各セルの値を空の文字列に置き換えます。このフィルタは、行のデータではなく、行数または条件に一致する行キーのリストのみが必要な場合に有用です。
ラベル適用フィルタ。各セルにラベルを適用して、レスポンスの各セルを生成したフィルタを識別します。アプリケーションはこれらのラベルを使用して、クライアント側で追加のフィルタリングを実行できます。
合成フィルタ
合成フィルタを使用すると、複数の基本フィルタを組み合わせて 1 つのフィルタを作成し、1 つの読み取りリクエストに複数のフィルタを適用できます。
たとえば、サーバーの CPU 使用率のデータを取得するには、行キーが SERVER
で始まる行のみを含めるフィルタを 1 つ使用し、その後に CPU
列ファミリー内のセルのみを含める 2 番目のフィルタを使用します。
Bigtable には、次の作成フィルタが用意されています。
- チェーン。各入力行に一連のフィルタを適用し、出力行を返します。チェーン フィルタは論理 AND を使用することと類似しています。
- インターリーブ。複数のフィルタを介して各入力行を送信し、入力行のすべてのフィルタ結果を 1 つの出力行に結合します。インターリーブ フィルタは論理 OR を使用することと類似しています。
- 条件。入力行に使用可能な 2 つのフィルタのいずれかを適用して出力行を生成します。フィルタを選択するには、入力行に述語フィルタを適用し、述語フィルタの出力行にセルが含まれているかどうかを確認します。
フィルタとパフォーマンス
フィルタを使用すると、実際に必要なデータのみを取得できます。そのため、フィルタを使用すると、アプリケーションに送信されるデータの量を削減してパフォーマンスを改善できます。
ただし、フィルタはすべてのパフォーマンスの問題に対する汎用的なソリューションではありません。一般に、フィルタは、リクエストの送信からレスポンスの受信までのレイテンシを短縮するためではなく、スループット効率を制御するために使用します。正しく使用すると、フィルタは読み取りパフォーマンスを改善するための戦略の一環として有効な可能性があります。
特に、条件フィルタは、条件が他のフィルタよりもはるかに処理速度が遅いため、レイテンシが増大する可能性があります。読み取りリクエストにおいてパフォーマンスを重視する場合は、リクエストで条件を使用しないでください。
フィルタの概要
次の表に、Bigtable に用意されたフィルタについて、各フィルタの詳細とコードサンプルへのリンクとともに一覧で示します。
制限フィルタ | |
---|---|
すべてブロック | セルを出力しません。主にデバッグに対して有用です。 |
列あたりのセル数の上限 | 列の最新バージョン N 個のみを行に含めます。 |
行あたりのセル数の上限 | 行の最初の N 個のセルのみを含めます。 |
行あたりのセル数のオフセット | 行の最初の N 個のセルを省略します。 |
列ファミリーの正規表現 | 列ファミリーが RE2 正規表現と一致するセルのみを含めます。 |
列修飾子の正規表現 | 列修飾子が正規表現と一致するセルのみを含めます。 |
列の範囲 | 列修飾子が特定の範囲内にある特定の列ファミリーのセルのみを含めます。 |
すべて渡す | すべての入力セルを出力します。主にデバッグに対して有用です。 |
行キーの正規表現 | 行キーが正規表現と一致するセルのみを含めます。 |
行のサンプル | 行のランダムなサンプルを取得します。 |
Sink | 最終出力行にセルを含め、後続のフィルタで変更または削除されないようにします。 |
タイムスタンプの範囲 | タイムスタンプが特定の範囲内にあるセルのみを含めます。 |
値の範囲 | 値が特定の範囲内にあるセルのみを含めます。 |
値の正規表現 | 値が正規表現と一致するセルのみを含めます。 |
変更フィルタ | |
---|---|
ラベル適用 | すべてのセルにラベルを追加します。 |
値を削除 | 各セル値に空の文字列を返します。 |
合成フィルタ | |
---|---|
チェーン | 複数のフィルタを順番に適用します。 |
条件 | 使用可能な 2 つのフィルタのいずれかを行に適用します。 |
インターリーブ | 複数のフィルタの出力行を 1 つの出力行に結合します。 |