ユーザー定義関数 (UDF) の使用上の注意です。
UDF のリスト
関数 | 説明 |
フィールド値が指定されたセットに含まれているかどうかをチェックします。単一値フィールドと複数値フィールドをサポートします。 | |
フィールド値が指定されたセットから除外されているかどうかをチェックします。単一値フィールドと複数値フィールドをサポートします。 | |
指定された条件に基づいて、指定されたフィールドの転置インデックスをクエリします。 | |
HA3 本来のクエリ構文を使用して、指定された条件に基づいて転置インデックスをクエリします。 | |
複数の INT64 値を単一の INT64 値にマージします。 | |
範囲に基づいてフィールド値をマッピングします。 | |
フィールド値が指定された区間に含まれているかどうかをチェックします。 | |
フィールド値を正規化します。 |
クエリの例
テーブル内の全データのクエリ
SELECT nid, price, brand, size FROM phone ORDER BY nid LIMIT 1000 USE_TIME: 0.881, ROW_COUNT: 10
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
1 | 3599 | Huawei | 5.9 |
2 | 4388 | Huawei | 5.5 |
3 | 899 | Xiaomi | 5 |
4 | 2999 | OPPO | 5.5 |
5 | 1299 | Meizu | 5.5 |
6 | 169 | Nokia | 1.4 |
7 | 3599 | Apple | 4.7 |
8 | 5998 | Apple | 5.5 |
9 | 4298 | Apple | 4.7 |
10 | 5688 | Samsung | 5.6 |contain
プロトタイプ:
boolean contain(INT a, const string b) boolean contain(LITERAL a, const string b) boolean contain(INT_ARRAY a, const string b) boolean contain(LITERAL_ARRAY a, const string b)説明:
単一値または複数値のフィールド a に、b で指定された内容が含まれているかどうかをチェックします。
パラメーター:
パラメーター a: INT、LITERAL、INT_ARRAY、または LITERAL_ARRAY 型の入力。
パラメーター b:
|で区切られた定数文字列式。いずれか 1 つの項目に一致すればよいことを示します。戻り値:
パラメーター a にパラメーター b で指定されたセットが含まれているかどうかを、ブール値で返します。
例:
SELECT nid, price, brand, size FROM phone WHERE contain(nid, '1|2|3') ORDER BY nid LIMIT 100USE_TIME: 0.059, ROW_COUNT: 3
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
1 | 3599 | Huawei | 5.9 |
2 | 4388 | Huawei | 5.5 |
3 | 899 | Xiaomi | 5 |notcontain
プロトタイプ:
boolean notcontain(INT a, const string b) boolean notcontain(LITERAL a, const string b) boolean notcontain(INT_ARRAY a, const string b) boolean notcontain(LITERAL_ARRAY a, const string b)説明:
単一値または複数値のフィールド a が、b で指定された内容に 含まれていない かどうかをチェックします。
パラメーター:
パラメーター a: INT、LITERAL、INT_ARRAY、または LITERAL_ARRAY 型の入力。
パラメーター b:
|で区切られた定数文字列式。どの項目にも一致しないことを示します。戻り値:
パラメーター a がパラメーター b で指定されたセットに 含まれていない かどうかを、ブール値で返します。
例:
notcontainを使用して、nid フィールド値が [1,2,3] に 含まれていない すべてのレコードを取得します。SELECT nid, price, brand, size FROM phone WHERE notcontain(nid, '1|2|3') ORDER BY nid LIMIT 100USE_TIME: 0.092, ROW_COUNT: 7 ------------------------------- TABLE INFO --------------------------- nid | price | brand | size | 4 | 2999 | OPPO | 5.5 | 5 | 1299 | Meizu | 5.5 | 6 | 169 | Nokia | 1.4 | 7 | 3599 | Apple | 4.7 | 8 | 5998 | Apple | 5.5 | 9 | 4298 | Apple | 4.7 | 10 | 5688 | Samsung | 5.6 |
MATCHINDEX
プロトタイプ:
boolean MATCHINDEX(const string a, const string b)説明:
フィールド a の転置インデックスに対し、b で指定された内容が 含まれている かどうかをチェックします。
WHERE 条件でのみ使用され、インデックステーブルの取得フェーズで転置インデックスを使用したクエリを高速化します。
パラメーター:
パラメーター a: 転置インデックスが作成されたフィールド名を表す定数文字列。
パラメーター b: 検索文字列を表す定数文字列。
パラメーター b は単一の文字列としてクエリできます。
戻り値:
フィールド a にパラメーター b で指定された内容が 含まれている かどうかを、ブール値で返します。
例:
MATCHINDEXを使用して、転置インデックスフィールドtitleにキーワード "lens" が含まれるレコードを取得します。SELECT nid, brand FROM phone WHERE MATCHINDEX('title', 'lens')------------------------------- TABLE INFO --------------------------- nid | brand | 1 | Huawei |
QUERY
プロトタイプ:
boolean QUERY(const string a, const string b)説明:
フィールド a に b で指定された内容が 含まれている かどうかをチェックし、自動的なトークン化と取得機能を提供します。
SQL モードで HA3 エンジンのネイティブクエリ構文 (HA3 クエリ構文) をサポートします。
WHERE 条件でのみ使用され、インデックステーブルの取得フェーズで転置インデックスを使用したクエリを高速化します。
パラメーター:
パラメーター a: デフォルトのインデックスフィールドとして使用するフィールド名を表す定数文字列。
パラメーター b: HA3 クエリ構文のクエリ文字列を表す定数文字列。
クエリ解析時に解釈され、範囲インデックスにも使用できます。
戻り値:
フィールド a にパラメーター b で指定された内容が 含まれている かどうかを、ブール値で返します。
例:
QUERYを使用して、titleに "Huawei phone" が含まれるエントリをクエリします。
SELECT nid, price, brand, size FROM phone WHERE QUERY(title, 'Huawei phone')USE_TIME: 0.034, ROW_COUNT: 1
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
2 | 4388 | Huawei | 5.5 |複合条件を使用して、title に "Huawei phone" または "OPPO phone" が含まれるエントリを取得します。
SELECT nid, price, brand, size FROM phone
WHERE QUERY(title, 'Huawei phone OR OPPO phone')USE_TIME: 0.03, ROW_COUNT: 2
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
2 | 4388 | Huawei | 5.5 |
4 | 2999 | OPPO | 5.5 |注:
QUERY UDF のパラメーター 2 は、HA3 クエリ構文パーサーによって解析されます。HA3 クエリ構文では、パラメーター 2 が定数文字列の場合、HA3 クエリに渡される際に先頭と末尾の単一引用符が削除される点にご注意ください。たとえば、QUERY(title, 'Huawei phone OPPO phone') は、HA3 クエリの query=Huawei phone OPPO phone と同等です。HA3 のクエリ文字列で query='Huawei phone' AND 'OPPO phone' のように引用符を使用する場合、QUERY UDF では QUERY(title, '''Huawei phone'' AND ''OPPO phone''') と記述します。SQL 記述における定数文字列の使用上の注意については、「制限」の「定数文字列」セクションをご参照ください。
よくある間違い:
エラーの種類 | 誤った形式 | 正しい形式 |
構文エラーにより、クエリが結果を返しません | QUERY('pidvid','123:456') | QUERY('pidvid','"123:456"') |
rangevalue
プロトタイプ:
float rangevalue(float v, string desc)説明:
連続値を離散値にマッピングします。
パラメーター:
パラメーター v: 連続値を持つフィールド。
パラメーター desc: マッピングルール。
戻り値:
マッピング後の離散値。
例:
rangevalueを使用して price 値をマッピングします。価格が 1000 以下の値は 1.0 に、1000 より大きく 5000 以下の値は 2.0 にマッピングされます。指定されていないその他の値は、元の価格を保持します。SELECT rangevalue(price,'(,1000]:1.0;(1000,5000]:2.0') FROM phone;
range
プロトタイプ:
boolean range(INT v, const string rangeDesc) boolean range(FLOAT v, const string rangeDesc) boolean range(DOUBLE v, const string rangeDesc)説明:
フォワードインデックスのフィールド値が指定された区間内にあるかどうかをチェックします。
パラメーター:
パラメーター v: フィールド。単一値の数値型がサポートされています。
パラメーター rangeDesc: 数値範囲の間隔を記述する定数。開区間、閉区間、半開区間がサポートされています。
戻り値:
v が rangeDesc で指定された範囲内にあるかどうかを判定します。次の表に、サポートされている表記法とその戻り値を示します。
呼び出し表記の例 | 戻り値 |
range(v, "[0, 100]") | 0 <= v <= 100 |
range(v, "(0, 100)") | 0 < v < 100 |
range(v, "[0, 100)") | 0 <= v < 100 |
range(v, "(0, 100]") | 0 < v <= 100 |
range(v, "(0,)") range(v, "(0,]") | 0 < v |
range(v, "[0,)") range(v, "[0,]") | 0 <= v |
range(v, "(,100)") range(v, "[,100)") | v < 100 |
range(v, "(,100]") range(v, "[,100]") | v <= 100 |
range(v, "(,)") range(v, "[,]") range(v, "[,)") range(v, "(,]") | true |
注: rangeDesc 文字列の先頭に "!" 記号を付けて、意図した間隔を否定することもサポートしています。
例:
rangeの使用SELECT nid FROM phone where range(price,"(30.0,127.0)") SELECT nid FROM phone where range(price,"!(30.0,127.0)")注: range は SQL の予約語であるため、エスケープする必要があります。
normalizescore
プロトタイプ:
double normalizescore(INT v, const double defaultScore) double normalizescore(FLOAT v, const double defaultScore) double normalizescore(DOUBLE v, const double defaultScore)説明:
入力フィールド v を double 型に変換して正規化します。フィールドが初期化されている場合は元の値が返され、初期化されていない場合は defaultScore が返されます。
パラメーター:
パラメーター v: フィールド。単一値の数値型がサポートされています。
パラメーター defaultScore: double 型に変換可能な文字列定数である必要があります。
戻り値:
v が初期化されている場合は元の値が返され、初期化されていない場合は defaultScore が返されます。
例:
price フィールドを持つ 3 つのドキュメントがあり、元の内容は次のとおりです。
doc1: price = 1.0
doc2: price = (未初期化)
doc3: price = 2.0
実行
select normalizescore(price, "1000.0") as normalized_score from phone
USE_TIME: 32.141 ms, ROW_COUNT: 3
------------------------------- TABLE INFO ---------------------------
normalized_score(double) |
1.0 |
1000.0 |
2.0 |