alphaTokens
導入バージョン: v1.1.0
a-z および A-Z の範囲に含まれる連続したバイト列からなる部分文字列を抽出し、それらの部分文字列の配列を返します。
構文
alphaTokens(s[, max_substrings])別名: splitByAlpha
引数
s— 分割する文字列。Stringmax_substrings— 任意。max_substrings > 0の場合、返される部分文字列の数はmax_substrings以下になります。それ以外の場合、この関数は可能な限り多くの部分文字列を返します。Int64
戻り値
s から抽出された部分文字列の配列を返します。Array(String)
例
使用例
SELECT alphaTokens('abca1abc');┌─alphaTokens('abca1abc')─┐
│ ['abca','abc'] │
└─────────────────────────┘arrayStringConcat
導入バージョン: v1.1.0
配列内の値の文字列表現を、指定した区切り文字で連結します。区切り文字は省略可能なパラメータで、デフォルト値は空文字列です。
構文
arrayStringConcat(arr[, separator])別名: array_to_string
引数
arr— 連結する配列。Array(T)separator— 省略可能。区切り文字列。デフォルトは空文字列です。const String
戻り値
連結後の文字列を返します。String
例
使用例
SELECT arrayStringConcat(['12/05/2021', '12:50:00'], ' ') AS DateString;┌─DateString──────────┐
│ 12/05/2021 12:50:00 │
└─────────────────────┘extractAllGroupsVertical
導入バージョン: v20.5.0
正規表現を使用して文字列内のすべてのグループに一致する部分を抽出し、配列の配列を返します。各配列には、入力文字列での出現順にまとめられた、各グループの一致部分が含まれます。
構文
extractAllGroupsVertical(s, regexp)別名: extractAllGroups
引数
s— 抽出対象の入力文字列。StringまたはFixedStringregexp— マッチに使用する正規表現。const Stringまたはconst FixedString
戻り値
配列の配列を返します。各内側の配列には、1 回のマッチでキャプチャされたグループが含まれます。各マッチごとに、正規表現内のキャプチャグループ (グループ 1、グループ 2 など) に対応する要素を持つ配列が生成されます。マッチが見つからない場合は、空の配列を返します。Array(Array(String))
例
使用例
WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractAllGroupsVertical(s, '< ([\\w\\-]+): ([^\\r\\n]+)');[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']]naiveBayesNgrams
導入バージョン: v26.7.0
Naive Bayes Dictionary (NAIVE_BAYES レイアウト) と同じトークン化方式でテキストを N-gram に分割します。byte、codepoint、token モードに対応し、必要に応じて境界パディングも指定できます。これを使うと、その Dictionary が取り込む事前集計済みの (ngram, class_id, count) 学習データを作成できるため、学習用 N-gram を naiveBayesClassifier がクエリ時に生成するものと完全に一致させられます。
構文
naiveBayesNgrams(text, n, mode[, start_token, end_token])引数
text— N-gram に分割するテキスト。Stringn— N-gram のサイズ。1 ~ 1024。const UIntmode— トークン化モード: 'byte'、'codepoint'、または 'token'。const Stringstart_token— 任意。入力の先頭に境界トークンを (n-1) 回追加します。'byte'/'codepoint' では数値、'token' ではリテラルです。空文字列の場合、パディングは行われません。const Stringend_token— 任意。入力の末尾に境界トークンを (n-1) 回追加します。const String
戻り値
入力テキストの N-gram。Array(String)
例
トークンのバイグラム
SELECT naiveBayesNgrams('the cat sat', 2, 'token');['the cat','cat sat']境界パディング付きトークンバイグラム
SELECT naiveBayesNgrams('cat', 2, 'token', '<s>', '</s>');['<s> cat','cat </s>']境界パディング付きバイトバイグラム (結果は16進数で表示)
SELECT arrayMap(x -> hex(x), naiveBayesNgrams('xy', 2, 'byte', '0x01', '0xFF'));['0178','7879','79FF']境界パディング付きのコードポイントバイグラム (結果は16進数で表示)
SELECT arrayMap(x -> hex(x), naiveBayesNgrams('ab', 2, 'codepoint', '0x10FFFE', '0x10FFFF'));['F48FBFBE61','6162','62F48FBFBF']ngrams
導入バージョン: v21.11.0
UTF-8文字列を長さ N の N-gram に分割します。
構文
ngrams(s, N)引数
s— 入力文字列。StringまたはFixedStringN— N-gram の長さ。const UInt8/16/32/64
戻り値
N-gram の配列を返します。Array(String)
例
使用例
SELECT ngrams('ClickHouse', 3);['Cli','lic','ick','ckH','kHo','Hou','ous','use']reverseBySeparator
導入バージョン: v26.2.0
指定した区切り文字で区切られた文字列内の部分文字列の順序を反転します。 この関数は、区切り文字で文字列を分割し、得られた各部分の順序を逆にしたうえで、 同じ区切り文字を使って再結合します。ドメイン名、 ファイルパス、その他の階層データで部分の順序を逆にしたい場合のパースに便利です。
例:
- reverseBySeparator('www.google.com') は 'com.google.www' を返します
- reverseBySeparator('a/b/c', '/') は 'c/b/a' を返します
- reverseBySeparator('x::y::z', '::') は 'z::y::x' を返します
構文
reverseBySeparator(string[, separator])引数
string— 各部分の順序を逆にする入力文字列。Stringseparator— 各部分の識別に使用する区切り文字列。指定しない場合は '.' (ドット) を使用します。デフォルト: '.'String
戻り値
元の文字列の部分文字列を右から左へ並べ替え、同じ区切り文字で連結した文字列を返します。String
例
基本的なドメインの反転
SELECT reverseBySeparator('www.google.com')com.google.wwwパスの逆順
SELECT reverseBySeparator('a/b/c', '/')c/b/a任意の区切り文字
SELECT reverseBySeparator('x::y::z', '::')z::y::xドットを含む場合の注意点
SELECT reverseBySeparator('.a.b.', '.').b.a.単一の要素
SELECT reverseBySeparator('single')single空の区切り文字
SELECT reverseBySeparator('abcde', '')edcbasplitByChar
導入バージョン: v1.1.0
指定したちょうど 1 文字の定数文字列 separator で文字列を分割し、部分文字列の配列を返します。
区切り文字が文字列の先頭または末尾にある場合や、区切り文字が連続して複数出現する場合は、空の部分文字列が生成されることがあります。
次の場合、空の部分文字列が生成されることがあります。
- 区切り文字が文字列の先頭または末尾にある
- 区切り文字が連続して複数出現する
- 元の文字列
sが空である
構文
splitByChar(separator, s[, max_substrings])引数
separator— 区切り文字は 1 バイト文字である必要があります。Strings— 分割対象の文字列です。Stringmax_substrings— 任意です。max_substrings > 0の場合、返される配列に含まれる部分文字列は最大max_substrings個です。それ以外の場合、関数は可能な限り多くの部分文字列を返します。デフォルト値は0です。Int64
戻り値
抽出された部分文字列の配列を返します。Array(String)
例
使用例
SELECT splitByChar(',', '1,2,3,abcde');┌─splitByChar(',', '1,2,3,abcde')─┐
│ ['1','2','3','abcde'] │
└─────────────────────────────────┘splitByNonAlpha
導入バージョン: v21.9.0
空白文字および句読点で区切って、文字列を部分文字列の配列に分割します。
構文
splitByNonAlpha(s[, max_substrings])引数
s— 分割対象の文字列。Stringmax_substrings— 省略可。max_substrings > 0の場合、返される部分文字列の数はmax_substrings個以下になります。それ以外の場合、この関数は可能な限り多くの部分文字列を返します。デフォルト値:0。Int64
戻り値
s から抽出された部分文字列の配列を返します。Array(String)
例
使用例
SELECT splitByNonAlpha('user@domain.com');['user','domain','com']splitByRegexp
導入バージョン: v21.6.0
指定された正規表現で区切られた文字列を、部分文字列の配列に分割します。 指定された正規表現が空の場合、文字列は1文字ずつの配列に分割されます。 正規表現に一致する箇所が見つからない場合、文字列は分割されません。
次の場合、空の部分文字列が選択されることがあります。
- 空でない正規表現の一致が文字列の先頭または末尾にある場合
- 空でない正規表現の一致が連続して複数回発生する場合
- 正規表現が空でなく、元の文字列 string が空の場合。
構文
splitByRegexp(regexp, s[, max_substrings])引数
regexp— 正規表現。定数。StringまたはFixedStrings— 分割対象の文字列。Stringmax_substrings— 任意。max_substrings > 0の場合、返される部分文字列の数は最大でmax_substringsになります。それ以外の場合、この関数は可能な限り多くの部分文字列を返します。デフォルト値:0。Int64
戻り値
s から抽出された部分文字列の配列を返します。Array(String)
例
使用例
SELECT splitByRegexp('\\d+', 'a12bc23de345f');┌─splitByRegexp('\\d+', 'a12bc23de345f')─┐
│ ['a','bc','de','f'] │
└────────────────────────────────────────┘空の正規表現
SELECT splitByRegexp('', 'abcde');┌─splitByRegexp('', 'abcde')─┐
│ ['a','b','c','d','e'] │
└────────────────────────────┘splitByString
導入バージョン: v1.1.0
複数文字で構成される定数 separator を使って文字列を分割し、部分文字列の配列を返します。
文字列 separator が空の場合、文字列 s は1文字ずつの配列に分割されます。
次の場合、空の部分文字列が含まれることがあります。
- 空でない区切り文字が文字列の先頭または末尾にある場合
- 空でない区切り文字が連続して複数ある場合
- 区切り文字が空でなく、元の文字列
sが空の場合
構文
splitByString(separator, s[, max_substrings])引数
separator— 区切り文字。Strings— 分割対象の文字列。Stringmax_substrings— 任意。max_substrings > 0の場合、返される部分文字列の数はmax_substrings以下になります。それ以外の場合、この関数は可能な限り多くの部分文字列を返します。デフォルト値:0。Int64
戻り値
s から抽出された部分文字列の配列を返します。 Array(String)
例
使用例
SELECT splitByString(', ', '1, 2 3, 4,5, abcde');┌─splitByString(', ', '1, 2 3, 4,5, abcde')─┐
│ ['1','2 3','4,5','abcde'] │
└───────────────────────────────────────────┘区切り文字が空の場合
SELECT splitByString('', 'abcde');┌─splitByString('', 'abcde')─┐
│ ['a','b','c','d','e'] │
└────────────────────────────┘splitByWhitespace
導入バージョン: v21.9.0
空白文字で区切られた文字列を、部分文字列の配列に分割します。
構文
splitByWhitespace(s[, max_substrings])引数
s— 分割対象の文字列。Stringmax_substrings— 任意。max_substrings > 0の場合、返される部分文字列の数はmax_substringsを超えません。それ以外の場合、関数は可能な限り多くの部分文字列を返します。デフォルト値:0。Int64
戻り値
s から抽出された部分文字列の配列を返します。Array(String)
例
使用例
SELECT splitByWhitespace(' 1! a, b. ');['1!','a,','b.']tokens
導入バージョン: v21.11.0
指定されたトークナイザーを使用して、文字列をトークンに分割します。
利用可能なトークナイザーは次のとおりです。
splitByNonAlphaは、ASCII の英数字以外の文字で文字列を分割します (関数 splitByNonAlpha も参照) 。splitByString(S)は、ユーザー定義の区切り文字列Sで文字列を分割します (関数 splitByString も参照) 。区切り文字は省略可能なパラメータで指定できます。たとえばtokens(value, 'splitByString', [', ', '; ', '\n', '\\'])のように指定します。なお、各区切り文字列は複数文字で構成できます (例では', ') 。明示的に指定しない場合、デフォルトの区切り文字リストは単一の空白文字[' ']です。splitByRegexp(re)は、ユーザー定義の正規表現区切り文字reで文字列を分割します (関数 splitByRegexp も参照) 。正規表現は必須です。たとえばtokens(value, 'splitByRegexp', '[^\p{L}\p{N}#+]+')のように指定します。splitByStringとは異なり、正規表現区切り文字では、C++やC#などの特殊文字を含むトークンを保持できます。asciiCJKは、Unicode の単語境界規則 (UAX #29 に類似) を使用して文字列をトークンに分割します。ASCII の英数字およびアンダースコアは、コネクタ (文字には:、同種の文字には.と') とともにトークンを形成します。非 ASCII の Unicode 文字は 1 文字単位のトークンになります。chineseは、辞書と隠れマルコフモデルを使用して中国語テキストを単語に分割します (アルゴリズムは jieba に従い、埋め込み辞書とモデルデータは cppjieba から派生しています) 。非 ASCII 文字をすべて 1 文字単位のトークンとして扱うasciiCJKとは異なり、chineseは連続する中国語文字を単語にまとめるため、中国語テキストではより意味のあるトークンと高い検索品質が得られます。省略可能なgranularity引数には、coarse_grained(デフォルト) またはfine_grainedを指定します。後者は重複する部分単語も列挙するため、索引が大きくなる代わりに再現率が向上します。icu(locale)は、ICU ライブラリの Unicode 単語分割 (UAX #29) を使用して文字列を単語トークンに分割します。単語間に空白のない文字体系 (中国語、日本語、タイ語など) では、ICU は辞書ベースの分割を適用するため、そのようなテキストは意味のある単語に分割されます。localeはセグメンターに渡される ICU ロケールです (分割は主に文字体系と辞書に基づいて行われ、ロケールは ICU のロケール固有の調整を選択します) 。これは必須であり、たとえばtokens(value, 'icu', 'ja')のように個別の引数として渡します。japaneseは、MeCab 形態素解析器を使用して日本語テキストを単語に分割します。サーバー設定で構成された辞書が必要です (テキスト索引 のドキュメントを参照) 。ngrams(N)は、文字列を同じ長さのN-gram に分割します (関数 ngrams も参照) 。N-gram の長さは、1 から 8 までの省略可能な整数パラメータで指定できます。たとえばtokens(value, 'ngrams', 3)のように指定します。明示的に指定しない場合、デフォルトの ngram サイズは 3 です。sparseGrams(min_length, max_length, min_cutoff_length)は、文字数がmin_length以上max_length以下 (両端含む) の可変長 n-gram に文字列を分割します (関数 sparseGrams も参照) 。明示的に指定しない場合、min_lengthとmax_lengthのデフォルト値はそれぞれ 3 と 100 です。パラメータmin_cutoff_lengthを指定すると、長さがmin_cutoff_length以上の n-gram のみが返されます。ngrams(N)と比べると、sparseGramsトークナイザーは可変長の N-gram を生成するため、元のテキストをより柔軟に表現できます。たとえばtokens(value, 'sparseGrams', 3, 5, 4)は、入力文字列から内部的に 3-, 4-, 5-gram を生成しますが、返されるのは 4-gram と 5-gram のみです。arrayはトークン化を行いません。つまり、各行の値全体が 1 つのトークンになります (関数 array も参照) 。他のシステムとの互換性のため、keywordはarrayの別名として利用できます。
splitByString トークナイザーで、トークンがプレフィックスコードを構成しない場合は、長い区切り文字を優先して一致させる必要があるでしょう。
そのためには、区切り文字を長さの降順で渡します。
たとえば、separators = ['%21', '%'] の場合、文字列 %21abc は ['abc'] としてトークン化されます。一方、separators = ['%', '%21'] の場合は ['21ac'] としてトークン化されます (これはおそらく意図した結果ではありません) 。
構文
tokens(value) -- 'splitByNonAlpha' tokenizer
tokens(value, 'splitByNonAlpha')
tokens(value, 'splitByString'[, separators])
tokens(value, 'splitByRegexp', regexp)
tokens(value, 'asciiCJK')
tokens(value, 'chinese'[, granularity])
tokens(value, 'icu', locale)
tokens(value, 'japanese')
tokens(value, 'ngrams'[, n])
tokens(value, 'sparseGrams'[, min_length, max_length[, min_cutoff_length]])
tokens(value, 'array')引数
value— 入力文字列です。StringまたはFixedStringtokenizer— 使用するトークナイザーです。有効な引数はsplitByNonAlpha、splitByString、splitByRegexp、asciiCJK、chinese、icu、japanese、ngrams、sparseGrams、arrayです。省略可能で、明示的に設定しない場合のデフォルトはsplitByNonAlphaです。const Stringlocale— 引数tokenizerがicuの場合にのみ使用します。たとえば'ja'のような必須のロケールです。const Stringn— 引数tokenizerがngramsの場合にのみ使用します。N-gram の長さを指定する省略可能なパラメータです。明示的に設定しない場合のデフォルトは3です。const UInt8separators— 引数tokenizerがsplitの場合にのみ使用します。区切り文字列を指定する省略可能なパラメータです。明示的に設定しない場合のデフォルトは[' ']です。const Array(String)regexp— 引数tokenizerがsplitByRegexpの場合にのみ使用します。正規表現の区切り文字を指定する必須パラメータです。const Stringmin_length— 引数tokenizerがsparseGramsの場合にのみ使用します。最小グラム長を指定する省略可能なパラメータで、デフォルトは3です。const UInt8max_length— 引数tokenizerがsparseGramsの場合にのみ使用します。最大グラム長を指定する省略可能なパラメータで、デフォルトは100です。const UInt8min_cutoff_length— 引数tokenizerがsparseGramsの場合にのみ使用します。最小カットオフ長を指定する省略可能なパラメータです。const UInt8granularity— 引数tokenizerがchineseの場合にのみ使用します。セグメンテーションの粒度を制御する省略可能なパラメータで、coarse_grained(デフォルト) またはfine_grainedのいずれかです。const String
戻り値
入力文字列から得られたトークンの Array を返します。Array
例
デフォルトのトークナイザー
SELECT tokens('test1,;\\\\ test2,;\\\\ test3,;\\\\ test4') AS tokens;['test1','test2','test3','test4']Ngram トークナイザー
SELECT tokens('abc def', 'ngrams', 3) AS tokens;['abc','bc ','c d',' de','def']tokensForLikePattern
導入バージョン: v26.3.0
指定したトークナイザーを使用して、LIKE のパターン文字列をトークンに分割します。
tokens 関数とは異なり、この関数は LIKE パターンの特性
(先頭および末尾のワイルドカード文字など) を考慮し、パターンマッチングに有用な
トークンを抽出するための、トークナイザー固有のルールを適用します。
この関数は tokens 関数と同じ引数セットをサポートしますが、一部例外があります。
chinese および icu トークナイザーはここではサポートされません。
LIKE パターンのトークン化が意味を持つのは、LIKE のセマンティクスを明示的にサポートする
(supportsStringLike()) トークナイザーに限られます。サポートされていないトークナイザーで
tokensForLikePattern を呼び出すと BAD_ARGUMENTS がスローされます。
代わりに通常の tokens を使用してください。
tokenizer の後に続く追加の引数は、選択した
トークナイザーに応じて解釈されます
(たとえば、ngrams の n、splitByString の separators、
sparseGrams の min_length / max_length [/ min_cutoff_length]) 。
この関数は主にデバッグおよびテスト用途を想定しており、 LIKE パターンに対するトークン化の挙動を解析するために内部で使用されます。
構文
tokensForLikePattern(value[, tokenizer[, tokenizer_specific_arguments...]])引数
value— 入力文字列です。StringまたはFixedStringtokenizer— 使用するトークナイザーです。有効な値はsplitByNonAlpha、splitByString、asciiCJK、ngrams、sparseGrams、arrayです。省略可能で、明示的に設定しない場合のデフォルトはsplitByNonAlphaです。const Stringlocale— 引数tokenizerがicuの場合にのみ使用されます。たとえば'ja'のような、必須のロケールです。const Stringn— 引数tokenizerがngramsの場合にのみ使用されます。N-gram の長さを指定する省略可能なパラメータです。明示的に設定しない場合のデフォルトは3です。const UInt8separators— 引数tokenizerがsplitの場合にのみ使用されます。区切り文字列を指定する省略可能なパラメータです。明示的に設定しない場合のデフォルトは[' ']です。const Array(String)regexp— 引数tokenizerがsplitByRegexpの場合にのみ使用されます。正規表現の区切り文字を指定する必須パラメータです。const Stringmin_length— 引数tokenizerがsparseGramsの場合にのみ使用されます。最小グラム長を指定する省略可能なパラメータで、デフォルトは3です。const UInt8max_length— 引数tokenizerがsparseGramsの場合にのみ使用されます。最大グラム長を指定する省略可能なパラメータで、デフォルトは100です。const UInt8min_cutoff_length— 引数tokenizerがsparseGramsの場合にのみ使用されます。最小カットオフ長を指定する省略可能なパラメータです。const UInt8granularity— 引数tokenizerがchineseの場合にのみ使用されます。セグメンテーションの粒度を制御する、省略可能なパラメータです。coarse_grained(デフォルト) またはfine_grainedを指定できます。const String
戻り値
入力文字列から生成されたトークンの Array を返します。Array
例
デフォルトのトークナイザー
SELECT tokensForLikePattern('%test1,test2,test3%') AS tokens;['test2']