N-gram ブルームフィルターインデックス
Public Preview
N-gram ブルームフィルターインデックスは、通常、LIKE クエリや ngram_search
および ngram_search_case_insensitive
関数の計算速度を向上させるために使用される特別な ブルームフィルターインデックス です。
N-gram ブルームフィルターインデックスは、文字列型(STRING
、CHAR
、または VARCHAR
)の列にのみ適しています。N-gram ブルームフィルターインデックスとブルームフィルターインデックスの違いは、N-gram ブルームフィルターインデックスが最初に文字列をトークン化し、その結果得られたサブストリングをブルームフィルターインデックスに書き込むことです。たとえば、あるインデックス付き列の値が文字列 Technical
であるとし ます。従来のブルームフィルターインデックスでは、文字列 Technical
全体が直接インデックスに書き込まれます。しかし、gram_num
が 4
に指定された N-gram ブルームフィルターインデックスでは、文字列 Technical
は次のようなサブストリングにトークン化されます。
"Tech", "echn", "chni", "hnic", "nica", "ical"
そして、これらの6つのサブストリングがブルームフィルターインデックスに書き込まれます。
使用上の注意
- Duplicate Key または主キーテーブルの場合、すべての列(文字列型)に対して N-gram ブルームフィルターインデックスを作成できます。集計テーブルまたはユニークキーテーブルの場合、キー列(文字列型)にのみ N-gram ブルームフィルターインデックスを作成できます。
- N-gram ブルームフィルターインデックスは、文字列型(CHAR、STRING、VARCHAR)の列にのみ作成できます。
- クエリが N-gram ブルームフィルターインデックスにヒットしたかどうかを確認するには、クエリのプロファイル内の
BloomFilterFilterRows
フィールドをチェックします。 - 単一の列に対して作成できるインデックスの種類は、ブルームフィルターまたは N-gram ブルームフィルターのいずれか一つです。
基本操作
N-gram ブルームフィルターインデックスの作成
CREATE TABLE test.table1
(
k1 CHAR(10),
k2 CHAR(10),
v1 INT SUM,
INDEX index_name (k2) USING NGRAMBF ("gram_num" = "4",
"bloom_filter_fpp" = "0.05") COMMENT ''
)
ENGINE = olap
AGGREGATE KEY(k1, k2)
DISTRIBUTED BY HASH(k1);
N-gram ブルームフィルターインデックス関連のパラメータ:
Parameter | Required | Description |
---|---|---|
index_name | Yes | インデックスの名前。インデックス名はテーブル内で一意でなければなりません。 |
column_name | Yes | インデックスが作成される列の名前。指定できるのは単一の列名のみです。上記の例では k2 です。 |
gram_num | No | インデックス付き列の文字列がトークン化された後のサブストリングの長さ。デフォルト値は2です。 |
bloom_filter_fpp | No | ブルームフィルターの偽陽性の可能性で、0.0001から0.05の範囲です。デフォルト値は0.05です。小さい値はより良いフィルタリングを提供しますが、より大きなストレージオーバーヘッドを伴います。 |
case_sensitive | No | このインデックスが大文字小文字を区別するかどうか。デフォルト値は true です。 |
COMMENT | No | インデックスコメント。 |
テーブル作成に関連する他のパラメータの説明については、 CREATE TABLE を参照してください。