このトピックでは、文字列関数の構文と使用例について説明します。
Simple Log Service では、以下の文字列関数がサポートされています。
関数名 | 構文 | 説明 | SQL 対応 | SPL 対応 |
chr(x) | ASCII コードを文字に変換します。 | √ | √ | |
codepoint(x) | 文字を ASCII コードに変換します。 | √ | √ | |
concat(x, y...) | 複数の文字列を 1 つの文字列に連結します。 | √ | √ | |
from_utf8(x) | バイナリ文字列を UTF-8 エンコード形式にデコードし、不正な UTF-8 文字をデフォルト文字 U+FFFD で置き換えます。 | √ | √ | |
from_utf8(x, replace_string) | バイナリ文字列を UTF-8 エンコード形式にデコードし、不正な UTF-8 文字をカスタム文字列で置き換えます。 | √ | √ | |
length(x) | 文字列の長さを計算します。 | √ | √ | |
levenshtein_distance(x, y) | x と y の間の最小編集距離を計算します。 | √ | × | |
lower(x) | 文字列を小文字に変換します。 | √ | √ | |
lpad(x, length, lpad_string) | 文字列の先頭に指定された文字を指定された長さまでパディングし、結果の文字列を返します。 | √ | √ | |
ltrim(x) | 文字列の先頭の空白を削除します。 | √ | √ | |
normalize(x) | 文字列を NFC 形式でフォーマットします。 | √ | × | |
position(sub_string in x) | 文字列内におけるサブストリングの位置を返します。 | √ | × | |
replace(x, sub_string ) | 文字列から一致した文字を削除します。 | √ | √ | |
replace(x, sub_string, replace_string) | 文字列内で一致した文字を指定された文字で置き換えます。 | √ | √ | |
reverse(x) | 文字列を逆順で返します。 | √ | √ | |
rpad(x, length, rpad_string) | 文字列の末尾に指定された文字を指定された長さまでパディングし、結果の文字列を返します。 | √ | √ | |
rtrim(x) | 文字列の末尾の空白を削除します。 | √ | √ | |
split(x, delimeter) | 指定された区切り文字を使用して文字列を分割し、サブストリングのコレクションを返します。 | √ | √ | |
split(x, delimeter, limit) | 指定された区切り文字を使用して文字列を分割し、limit を使用して分割数を制限したうえで、分割されたサブストリングのコレクションを返します。 | √ | √ | |
split_part(x, delimeter, part) | 指定された区切り文字を使用して文字列を分割し、指定された位置のコンテンツを返します。 | √ | √ | |
split_to_map(x, delimiter01, delimiter02) | 文字列を指定された第 1 の区切り文字で分割した後、その結果をさらに指定された第 2 の区切り文字で分割します。 | √ | √ | |
strpos(x, sub_string) | 文字列内におけるサブストリングの位置を返します。この関数は、position(sub_string in x) 関数と等価です。 | √ | √ | |
substr(x, start) | 文字列内の指定された位置からサブストリングを返します。 | √ | √ | |
substr(x, start, length) | 文字列内の指定された位置から指定された長さのサブストリングを返します。 | √ | √ | |
to_utf8(x) | 文字列を UTF-8 エンコード形式に変換します。 | √ | √ | |
trim(x) | 文字列の先頭および末尾の空白を削除します。 | √ | √ | |
upper(x) | 文字列を大文字に変換します。 | √ | √ | |
csv_extract_map(x, delimeter, quote, keys) | 対象文字列から単一行 CSV 情報を抽出します。 | √ | × | |
ilike(x, pattern) | 文字列が指定された文字パターンと一致するかどうかをチェックします。このチェックは大文字・小文字を区別しません。 | √ | √ | |
str_uuid() | ランダムな 128 ビット ID を生成し、文字列形式で返します。 | × | √ | |
gzip_compress(data, compression_level) | 文字列オブジェクトを受け取り、GZIP アルゴリズムで圧縮し、圧縮されたバイナリストリームを返します。 | × | √ | |
gzip_decompress(binary_data) | GZIP 圧縮済みのバイナリデータ(Varbinary)を受け取り、展開します。 | × | √ | |
search(search_expression) | SQL 分析文内でログデータに対して全文検索を実行します。ブール演算、フィールド固有の検索、あいまい検索、範囲検索をサポートしています。 | √ | × |
chr 関数
chr 関数は、ASCII コードを文字に変換します。
構文
chr(x)パラメーター
パラメーター | 説明 |
x | ASCII コードです。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、region フィールドの値が「c」で始まるかどうかを確認します。ASCII コード 99 は小文字の「c」を表します。
サンプルフィールド
region:cn-shanghaiクエリ文(テスト)
* | SELECT substr(region, 1, 1) = chr(99)クエリおよび分析結果

codepoint 関数
codepoint 関数は、文字を ASCII コードに変換します。
構文
codepoint(x)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
INTEGER 型。
例
次のクエリは、region フィールドの値が「c」で始まるかどうかを確認します。ASCII コード 99 は小文字の「c」を表します。
サンプルフィールド
upstream_status:200クエリ文(テスト)
* | SELECT codepoint(cast (substr(region, 1, 1) AS char(1))) = 99クエリおよび分析結果

concat 関数
concat 関数は、複数の文字列を 1 つの文字列に連結します。
構文
concat(x, y...)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
y | 値は VARCHAR 型です。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、region フィールドおよび request_method フィールドの値を連結します。
サンプルフィールド
region:cn-shanghai time:14/Jul/2021:02:19:40クエリ文(テスト)
* | SELECT concat(region, '-', time)クエリおよび分析結果

from_utf8 関数
from_utf8 関数は、バイナリ文字列を UTF-8 エンコード形式にデコードします。
構文
不正な UTF-8 文字をデフォルト文字 U+FFFD で置き換えます。
from_utf8(x)不正な UTF-8 文字をカスタム文字列で置き換えます。
from_utf8(x,replace_string)
パラメーター
パラメーター | 説明 |
x | 値はバイナリ型です。 |
replace_string | 置換に使用する文字列です。これは単一の文字またはスペースのみ可能です。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、バイナリ文字列 0x80 を UTF-8 エンコード形式にデコードし、返された結果内の不正な UTF-8 文字をデフォルト文字 U+FFFD で置き換えます。U+FFFD はデフォルトの置換文字として表示されます。
クエリ文(テスト)
* | SELECT from_utf8(from_base64('0x80'))クエリおよび分析結果

次のクエリは、バイナリ文字列 0x80 を UTF-8 エンコード形式にデコードし、返された結果内の不正な UTF-8 文字を「0」で置き換えます。
クエリ文(テスト)
* | SELECT from_utf8(from_base64('0x80'), '0')クエリおよび分析結果

length 関数
length 関数は、文字列の長さを計算します。
構文
length(x)パラメーター
パラメーター | |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
BIGINT 型。
例
次のクエリは、http_user_agent フィールドの値の長さを計算します。
サンプルフィールド
http_user_agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2クエリ文(テスト)
* | SELECT length(http_user_agent)クエリおよび分析結果

levenshtein_distance 関数
levenshtein_distance 関数は、2 つの文字列間の最小編集距離を計算します。
構文
levenshtein_distance(x, y)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
y | 値は VARCHAR 型です。 |
戻り値のデータ型
BIGINT 型。
例
次のクエリは、instance_id フィールドの値と owner_id フィールドの値との間の最小編集距離を計算します。
サンプルフィールド
instance_id:i-01 owner_id:owner-01クエリ文(デバッグ)
* | SELECT levenshtein_distance(owner_id, instance_id)クエリおよび分析結果

lower 関数
lower 関数は、文字列を小文字に変換します。
構文
lower(x)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、request_method フィールドの値を小文字に変換します。
サンプルフィールド
request_method:GETクエリ文(テスト)
* | SELECT lower(request_method)クエリおよび分析結果

lpad 関数
lpad 関数は、対象文字列の先頭に指定された文字を指定された長さまでパディングします。
構文
lpad(x, length, lpad_string)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
length | 結果文字列の長さを指定する整数です。
|
lpad_string | 新しいパディング文字が利用可能になりました。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、instance_id フィールドの値の先頭に「0」を追加し、合計で 10 文字の長さにします。
サンプルフィールド
instance_id:i-01クエリ文(テスト)
* | SELECT lpad(instance_id, 10, '0')クエリおよび分析結果

ltrim 関数
ltrim 関数は、文字列の先頭の空白を削除します。
構文
ltrim(x)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、region フィールドの値の先頭の空白を削除します。
サンプルフィールド
region: cn-shanghaiクエリ文(テスト)
* | SELECT ltrim(region)クエリおよび分析結果

normalize 関数
normalize 関数は、文字列を正規化形式 C(NFC)形式でフォーマットします。
構文
normalize(x)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、「schön」を NFC 形式でフォーマットします。
クエリ文(テスト)
* | SELECT normalize('schön')クエリおよび分析結果

position 関数
position 関数は、文字列内における対象サブストリングの位置を返します。
構文
position(sub_string in x)パラメーター
パラメーター | 説明 |
sub_string | 対象となるサブストリングです。 |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
INT 型。値は 1 から始まります。対象のサブストリングが見つからない場合は、0 を返します。
例
次のクエリは、cn というサブストリングが region フィールドの値の何番目の位置にあるかを調べます。
サンプルフィールド
region:cn-shanghaiクエリ文(テスト)
* | SELECT position('cn' in region)クエリおよび分析結果

replace 関数
replace 関数は、文字列から文字を削除したり、他の文字で置き換えたりします。
構文
文字列から一致した文字を削除できます。
replace(x, sub_string)サブストリングのすべての出現箇所を別の文字列で置き換えます。
replace(x, sub_string, replace_string)
パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
sub_string | 対象となるサブストリングです。 |
replace_string | 置換に使用するサブストリングです。 |
戻り値のデータ型
VARCHAR 型。
例
reverse 関数
reverse 関数は、文字列を逆順で返します。
構文
reverse(x)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
VARCHAR 型。
例
request_method フィールドの値を降順で並べ替えます。
サンプルフィールド
request_method:GETクエリ文(テスト)
* | SELECT reverse(request_method)クエリおよび分析結果

rpad 関数
rpad 関数は、文字列の末尾に指定された文字を指定された長さまでパディングします。
構文
rpad(x, length, rpad_string)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
length | 結果文字列の長さを指定する整数です。
|
rpad_string | パディングに使用する新しい文字です。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、instance_id フィールドの値の末尾に「0」を追加し、合計で 10 文字の長さにします。
サンプルフィールド
instance_id:i-01クエリ文(デバッグ)
* | SELECT rpad(instance_id, 10, '0')クエリおよび分析結果

rtrim 関数
rtrim 関数は、文字列の末尾の空白を削除します。
構文
rtrim(x)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、instance_id フィールドの値の末尾の空白を削除します。
サンプルフィールド
instance_id:i-01クエリ文(デバッグ)
* | SELECT rtrim(instance_id)クエリおよび分析結果

split 関数
split 関数は、指定された区切り文字を使用して文字列を分割し、結果のサブストリングの配列を返します。
構文
指定された区切り文字を使用して文字列を分割します。
split(x, delimeter)指定された区切り文字を使用して文字列を指定された数のサブストリングに分割します。
split(x,delimeter,limit)
パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
delimeter | 区切り文字です。 |
limit | 分割数です。値は 0 より大きい整数である必要があります。 |
戻り値のデータ型
配列型です。
例
例 1:次のクエリは、
request_uriフィールドの値をスラッシュ(/)を区切り文字として 4 つのサブストリングに分割し、結果の配列を返します。サンプルフィールド
request_uri:/request/path-1/file-9クエリ文(テスト)
* | SELECT split(request_uri, '/')クエリおよび分析結果

例 2:次のクエリは、
request_uriフィールドの値をスラッシュ(/)を区切り文字として 3 つのサブストリングに分割し、結果の配列を返します。サンプルフィールド
request_uri:/request/path-1/file-9クエリ文(テスト)
* | SELECT split(request_uri, '/', 3)クエリおよび分析結果

split_part 関数
split_part 関数は、指定された区切り文字を使用して文字列を分割し、指定された位置のサブストリングを返します。
構文
split_part(x, delimeter, part)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
delimeter | 区切り文字です。 |
part | 0 より大きい整数です。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、request_uri フィールドの値を疑問符(?)で分割し、最初のサブストリング(ファイルパス)を返します。その後、各パスに対するリクエスト数をカウントします。
サンプルフィールド
request_uri: /request/path-2/file-6?name=value&age=18 request_uri: /request/path-2/file-0?name=value&age=18 request_uri: /request/path-3/file-2?name=value&age=18クエリ文(テスト)
* | SELECT count(*) AS PV, split_part(request_uri, '?', 1) AS Path GROUP BY Path ORDER BY pv DESC分析結果

split_to_map 関数
split_to_map 関数は、文字列を第 1 の指定された区切り文字で分割した後、その結果を第 2 の指定された区切り文字で再度分割します。
構文
split_to_map(x, delimiter01, delimiter02)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
delimeter01 | 区切り文字です。 |
delimeter02 | 区切り文字です。 |
戻り値のデータ型
マップ型。
例
次のクエリは、time フィールドの値をカンマ(,)およびコロン(:)で分割します。結果はマップになります。
サンプルフィールド
time:upstream_response_time:"80", request_time:"40"クエリ文
* | SELECT split_to_map(time, ',', ':')クエリおよび分析結果

strpos 関数
strpos 関数は、文字列内における対象サブストリングの位置を返します。この関数は position 関数と等価です。
構文
strpos(x, sub_string)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
sub_string | 対象となるサブストリングです。 |
戻り値のデータ型
INT 型。値は 1 から始まります。対象のサブストリングが見つからない場合は、0 を返します。
例
次のクエリは、server_protocol フィールドの値において、文字「H」の位置を返します。
クエリ文(テスト)
* | SELECT strpos(server_protocol, 'H')クエリおよび分析結果

substr 関数
substr 関数は、文字列内の指定された位置からサブストリングを返します。
構文
文字列内の指定された位置からサブストリングを返します。
substr(x, start)指定された開始位置から指定された長さのサブストリングを返します。
substr(x,start,length)
パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
start | サブストリングの抽出を開始する位置です。値は 1 から始まります。 |
length | サブストリングの長さです。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、HTTP の部分を含む server_protocol フィールドの値から先頭 4 文字を抽出します。その後、HTTP プロトコルを使用するリクエスト数をカウントします。
サンプルフィールド
server_protocol:HTTP/2.0クエリ文(テスト)
* | SELECT substr(server_protocol, 1, 4) AS protocol, count(*) AS count GROUP BY server_protocolクエリおよび分析結果

to_utf8 関数
to_utf8 関数は、文字列を UTF-8 バイナリ表現にエンコードします。
構文
to_utf8(x)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
VARBINARY 型。
例
ログ文字列を UTF-8 エンコード形式に変換します。
クエリ文(テスト)
* | SELECT to_utf8('log')クエリおよび分析結果

trim 関数
trim 関数は、文字列の先頭および末尾の空白を削除します。
構文
trim(x)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、instance_id フィールドの値の先頭および末尾の空白を削除します。
サンプルフィールド
instance_id: i-01クエリ文(テスト)
* | SELECT trim(instance_id)クエリおよび分析結果

upper 関数
upper 関数は、対象文字列を大文字に変換します。
構文
upper(x)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
戻り値のデータ型
VARCHAR 型。
例
次のクエリは、region フィールドの値を大文字に変換します。
サンプルフィールド
region:cn-shanghaiクエリ文(テスト)
* | SELECT upper(region)クエリおよび分析結果

csv_extract_map 関数
csv_extract_map 関数は、対象文字列から単一行 CSV 情報を抽出します。
構文
csv_extract_map(x, delimeter, quote, keys)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
delimeter | CSV 区切り文字です。値は VARCHAR 型であり、長さは 1 です。 |
quote | CSV 引用符です。値は VARCHAR 型であり、長さは 1 です。 |
keys | CSV 情報の出力に使用するキー名です。値は配列型です。要素数がデータ内の CSV 情報の数と異なる場合、NULL が返されます。 |
戻り値のデータ型
map(varchar, varchar) 型。
例
次のクエリは、content フィールドから CSV 情報を抽出します。
サンプルフィールド
content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com'クエリ文
select csv_extract_map(content, ',', '"', array['ip', 'time', 'host']) as item出力データ

ilike 関数
ilike 関数は、入力文字列が指定された文字パターンと一致するかどうかをチェックします。このチェックは大文字・小文字を区別しません。
構文
ilike(x, pattern)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
pattern | 文字列とワイルドカード文字を含む文字パターンです。次の表にワイルドカード文字を示します。
|
戻り値のデータ型
BOOLEAN 型。
例
次のクエリは、request_uri が「file-6」で終わるかどうかをチェックします。
サンプルフィールド
request_uri: '/request/path-2/File-6'クエリ文
select ilike(request_uri, '%file-6')出力データ

str_uuid 関数
str_uuid() 関数は、ランダムな 128 ビットの ID を生成し、文字列として返します。
構文
str_uuid()戻り値
戻り値のデータ型:
VARCHAR形式: 32 桁の 16 進数と 4 つのハイフン
-を含む標準的な 36 文字の文字列です。構造例:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
例
この例では、ステージング環境で多数の一意の識別子を迅速に生成する方法を示します。
* | extend uuid = str_uuid()gzip_compress 関数
gzip_compress 関数は、文字列オブジェクトを受け取り、GZIP アルゴリズムで圧縮して、圧縮されたバイナリデータを返します。
構文
-- Method 1: Default compression level (6)
gzip_compress(data)
-- Method 2: Specify compression level
gzip_compress(data, compression_level)パラメーター
パラメーター | 型 | 説明 |
data | VARCHAR | 圧縮する文字列コンテンツです。 |
compression_level | BIGINT | 圧縮レベルです。値は 1 から 9 までの整数です。 |
戻り値
戻り値のデータ型:
VARBINARY説明: 圧縮されたバイナリデータです。
例
例 1:基本的な圧縮
* | extend compress_data = gzip_compress('Hello World')例 2:最大圧縮率(大規模テキストの場合)
ログエントリが数万文字に及ぶ場合、およびストレージ容量が気になる場合は、レベル
9を使用します:* | extend compress_data = gzip_compress('Hello World',9)
gzip_decompress 関数
gzip_decompress 関数は、GZIP 圧縮済みのバイナリデータ(Varbinary)を受け取り、それを解凍します。
構文
gzip_decompress(binary_data)パラメーター
binary_data は有効な GZIP 圧縮データである必要があります。これは通常、gzip_compress によって生成されます。入力が標準の GZIP フォーマットでない場合、この関数は NULL を返します。
戻り値
戻り値の型:
VARCHAR説明: 展開後の元のプレーンテキストコンテンツです。
例
シンプルな圧縮および展開パイプライン:
* | extend original_content = gzip_decompress(gzip_compress('Hello SLS!')) -- Output: "Hello SLS!"
search 関数
search 関数は、SQL 分析文内でログデータに対して全文検索を実行します。search 関数は標準の SQL 関数として提供されており、ブール演算、フィールド固有の検索、あいまい検索、範囲検索を含む複雑なクエリ条件をサポートしています。
制限事項
制限事項 | 説明 |
単一インスタンスの制限 | 各サブクエリ(基になる SELECT)では、 |
OR オペレーターの制限 |
|
インデックスを作成しており、スキャンモードではありません。 | search 関数はスキャンモードではサポートされていません。 |
クエリ構文入力の競合 | クエリ構文入力に実際のフィルター条件が含まれている場合、検索機能を使用できません。クエリ構文入力が Empty であるか、 |
パラメーターの型 | search 関数のパラメーターは文字列リテラルである必要があります。列参照、変数、関数式などの動的な値はサポートされていません。 |
パラメーターの数 | この関数は、正確に 1 つのパラメーターを受け入れる必要があります。 |
構文
search(search_expression)クエリ文での使用フォーマットは次のとおりです。
* | SELECT ... FROM log WHERE search('search_expression')重要: search 関数は WHERE 句でのみ使用できます。
パラメーター
パラメーター | 説明 |
search_expression | クエリ式を表す文字列リテラルです。 |
戻り値のデータ型
BOOLEAN。true は、現在の行がクエリ条件に一致することを示します。false は、現在の行がクエリ条件に一致しないことを示します。
例
例 1:次のクエリは、search 関数を使用して「error」と「timeout」を含むログを検索します。
* | SELECT * FROM log WHERE search('error AND timeout')例 2:次のクエリは、search 関数を使用して、status フィールドが 200 であるログのフィールド固有の検索を実行します。
* | SELECT * FROM log WHERE search('status: 200')例 3:次のクエリは、search 関数と SQL 述語を AND で結合して、status が 200 で request_time が 100 より大きいログを検索します。
* | SELECT * FROM log WHERE search('status: 200') AND request_time > 100詳細については、「search 関数を使用した全文検索の実行」をご参照ください。

