このトピックでは、バイナリ関数の構文について説明し、例を挙げます。
Simple Log Service は、次のバイナリ関数をサポートしています。
-
Simple Log Service のクエリ文では、文字列を単一引用符 (') で囲む必要があります。引用符で囲まれていないリテラル、または二重引用符 (") で囲まれたリテラルは、フィールド名または列名を表します。たとえば、'status' は文字列 'status' ですが、status または "status" はログフィールド status を指します。
-
varbinary はバイナリ文字型、varchar は可変長文字型です。
|
関数 |
構文 |
説明 |
SQL サポート |
SPL サポート |
|
from_base64(x) |
Base64 エンコードされた文字列をバイナリデータにデコードします。 |
√ |
√ |
|
|
from_base64url(x) |
URL セーフな Base64 文字列をバイナリデータにデコードします。 |
√ |
× |
|
|
from_big_endian_64(x) |
bigint をビッグエンディアンのバイナリ表現からデコードします。 |
√ |
× |
|
|
from_hex(x) |
16 進数文字列をバイナリデータに変換します。 |
√ |
√ |
|
|
length(x) |
varbinary データの長さをバイト単位で返すか、varchar 文字列の文字数を返します。 |
√ |
× |
|
|
md5(x) |
バイナリデータの MD5 ハッシュを計算します。 |
√ |
√ |
|
|
to_base64(x) |
バイナリデータを Base64 エンコードされた文字列にエンコードします。 |
√ |
√ |
|
|
to_base64url(x) |
バイナリデータを URL セーフな Base64 文字列にエンコードします。 |
√ |
× |
|
|
to_hex(x) |
バイナリデータを 16 進数文字列に変換します。 |
√ |
√ |
|
|
to_big_endian_64(x) |
bigint をビッグエンディアンのバイナリ表現にエンコードします。 |
√ |
× |
|
|
sha1(x) |
バイナリデータの SHA-1 ハッシュを計算します。 |
√ |
√ |
|
|
sha256(x) |
バイナリデータの SHA-256 ハッシュを計算します。 |
√ |
√ |
|
|
sha512(x) |
バイナリデータの SHA-512 ハッシュを計算します。 |
√ |
√ |
|
|
xxhash64(x) |
バイナリデータの xxHash64 ハッシュを計算します。 |
√ |
√ |
|
|
aes_encrypt(data, key, iv, mode, pad_style) |
AES 暗号化を使用してバイナリデータを暗号化します。 |
√ |
√ |
|
|
aes_decrypt(data, key, iv, mode, pad_style) |
AES で暗号化されたバイナリデータを復号します。 |
√ |
√ |
from_base64 関数
from_base64 関数は、Base64 エンコードされた文字列をバイナリデータにデコードします。
構文
from_base64(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varchar 文字列。この文字列は Base64 エンコードされている必要があります。 |
戻り値の型
varbinary
varbinary 型には非表示文字が含まれることがあります。Simple Log Service コンソールでは、結果が Base64 フォーマットで表示されます。
-
非表示文字を含む戻り値を表示するには、to_hex 関数を使用して 16 進数文字列に変換します。
-
戻り値に表示可能な文字のみが含まれている場合は、from_utf8 関数を使用して UTF-8 文字列に変換します。
例
Base64 エンコードされた文字列をバイナリデータにデコードし、そのバイナリデータを 16 進数文字列に変換します。
-
クエリ文
* | SELECT to_hex(from_base64('c2xz')) -
クエリ結果: _col0 列の値は
736C73です。
from_base64url 関数
from_base64url 関数は、URL セーフな Base64 文字列をバイナリデータにデコードします。
構文
from_base64url(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varchar 文字列。この文字列は、URL セーフな Base64 エンコードされた文字列である必要があります。 |
戻り値の型
varbinary
varbinary 型には非表示文字が含まれることがあります。Simple Log Service コンソールでは、結果が Base64 フォーマットで表示されます。
-
非表示文字を含む戻り値を表示するには、to_hex 関数を使用して 16 進数文字列に変換します。
-
戻り値に表示可能な文字のみが含まれている場合は、from_utf8 関数を使用して UTF-8 文字列に変換します。
例
URL セーフな Base64 文字列をバイナリデータにデコードします。
-
クエリ文
* | SELECT to_hex(from_base64url('c2xz')) -
クエリ結果: _col0 列の値は
736C73です。
from_big_endian_64 関数
from_big_endian_64 関数は、bigint をビッグエンディアンのバイナリ表現からデコードします。
構文
from_big_endian_64(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varbinary 式。 |
戻り値の型
bigint
例
数値 10 のビッグエンディアンのバイナリ表現を、元の数値に戻します。
-
クエリ文
* | SELECT from_big_endian_64(to_big_endian_64(10)) -
結果は
10です。
from_hex 関数
from_hex 関数は、16 進数文字列をバイナリデータに変換します。
構文
from_hex(x)
パラメーター
|
パラメーター |
説明 |
|
x |
16 進数の varchar 文字列。 |
戻り値の型
varbinary
例
16 進数文字列 'D74D' をバイナリデータに変換します。
-
クエリ文
* | SELECT from_hex('D74D') -
クエリ結果:
_col0列の値は100=です。
length 関数
length 関数は、varbinary データの長さをバイト単位で返すか、varchar 文字列の文字数を返します。
構文
length(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varbinary または varchar 式。 |
戻り値の型
bigint
例
文字列 '00101000' の長さを計算します。
-
クエリ文
* | SELECT length('00101000') -
結果は
8です。
md5 関数
md5 関数は、バイナリデータの MD5 ハッシュを計算します。
構文
md5(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varbinary 式。 |
戻り値の型
varbinary
例
Base64 文字列 '1101' からデコードされたバイナリデータの MD5 ハッシュを計算します。
-
クエリ文
* | SELECT MD5(from_base64('1101')) AS md5 -
クエリ結果: md5 列の値は
rG3lOanun9N57opubMnPDw==です。
to_base64 関数
to_base64 関数は、バイナリデータを Base64 エンコードされた文字列にエンコードします。
構文
to_base64(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varbinary 式。 |
戻り値の型
varchar
例
Base64 文字列 '10' からデコードされたバイナリデータを Base64 文字列にエンコードします。
-
クエリ文
* | SELECT to_base64(from_base64('10')) AS base64 -
クエリ結果: base64 列の値は
1w==です。
to_base64url 関数
to_base64url 関数は、バイナリデータを URL セーフな Base64 文字列にエンコードします。
構文
to_base64url(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varbinary 式。 |
戻り値の型
varchar
例
Base64 文字列 '100' からデコードされたバイナリデータを URL セーフな Base64 文字列にエンコードします。
-
クエリ文
* | SELECT to_base64url(from_base64('100')) -
クエリ結果:

to_hex 関数
to_hex 関数は、バイナリデータを 16 進数文字列に変換します。
構文
to_hex(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varbinary 式。 |
戻り値の型
varchar
例
Base64 文字列 '100' からデコードされたバイナリデータを 16 進数文字列に変換します。
-
クエリ文
* | SELECT to_hex(from_base64('100')) -
クエリ結果:
_col0列の値はD74Dです。
to_big_endian_64 関数
to_big_endian_64 関数は、bigint をビッグエンディアンのバイナリ表現にエンコードします。
構文
to_big_endian_64(x)
パラメーター
|
パラメーター |
説明 |
|
x |
bigint 式。 |
戻り値の型
varbinary
例
数値 0 をビッグエンディアンのバイナリデータに変換します。
-
クエリ文
* | SELECT to_big_endian_64(0) -
クエリ結果:

sha1 関数
sha1 関数は、バイナリデータの SHA-1 ハッシュを計算します。
構文
sha1(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varbinary 式。 |
戻り値の型
varbinary
例
Base64 文字列 '1101' からデコードされたバイナリデータの SHA-1 ハッシュを計算します。
-
クエリ文
* | SELECT sha1(from_base64('1101')) AS sha1 -
クエリ結果:

sha256 関数
sha256 関数は、バイナリデータの SHA-256 ハッシュを計算します。
構文
sha256(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varbinary 式。 |
戻り値の型
varbinary
例
Base64 文字列 '1101' からデコードされたバイナリデータの SHA-256 ハッシュを計算します。
-
クエリ文
* | SELECT sha256(from_base64('1101')) AS sha256 -
クエリ結果:

sha512 関数
sha512 関数は、バイナリデータの SHA-512 ハッシュを計算します。
構文
sha512(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varbinary 式。 |
戻り値の型
varbinary
例
Base64 文字列 '1101' からデコードされたバイナリデータの SHA-512 ハッシュを計算します。
-
クエリ文
* | SELECT sha512(from_base64('1101')) AS sha512 -
クエリ結果:

xxhash64 関数
xxhash64 関数は、バイナリデータの xxHash64 ハッシュを計算します。
構文
xxhash64(x)
パラメーター
|
パラメーター |
説明 |
|
x |
varbinary 式。 |
戻り値の型
varbinary
例
Base64 文字列 '10' からデコードされたバイナリデータの xxHash64 ハッシュを計算します。
-
クエリ文
* | SELECT xxhash64(from_base64('10')) -
クエリ結果:

aes_encrypt 関数
aes_encrypt 関数は、AES 暗号化を使用してバイナリデータを暗号化します。高度暗号化標準 (AES) は、広く使用されている対称暗号化アルゴリズムです。CBC、ECB、OFB、CFB、CTR などの複数の暗号化モードと、複数のパディングスタイルをサポートしています。
構文
aes_encrypt(data, key, iv, mode, pad_style)
パラメーター
|
パラメーター |
型 |
必須 |
説明 |
|
data |
バイナリ |
はい |
暗号化するプレーンテキストデータ。非定数値がサポートされています。 |
|
key |
バイナリ |
はい |
暗号化に使用されるキー。 |
|
iv |
バイナリ |
はい |
暗号化のための初期化ベクトル (IV)。 |
|
mode |
文字列 |
いいえ |
AES 暗号化モード。デフォルト値: CBC。有効な値: CBC (Cipher Block Chaining)、ECB (Electronic Code Book)、OFB (Output Feedback)、CFB (Cipher Feedback)、CTR (Counter)。 |
|
pad_style |
文字列 |
いいえ |
パディングスタイル。このパラメーターはブロックモード (CBC および ECB) でのみ有効です。ストリームモード (OFB、CFB、CTR) ではパディングは使用されません。デフォルト値: pkcs7。有効な値: pkcs7 (PKCS#7 パディング)、iso7816 (ISO 7816 パディング)、x923 (ANSI X.923 パディング)。 |
戻り値の型
バイナリ
例
例 1: デフォルトの CBC モードを使用してデータを暗号化します。
元のログ: {"test":"aliyuntest"}
-
処理ルール
* | extend result=to_base64(aes_encrypt(cast(test as binary), cast('qwertyuiopasdfgd' as binary), cast('xxywosjdapdiawdk' as binary))) -
処理結果:
{ "result": "gXIqu0cBBtZHQxJBK8GLeA==", "test": "aliyuntest" }
例 2: ECB モードを使用してデータを暗号化します。
元のログ: {"test":"aliyuntest"}
-
処理ルール
* | extend result=to_base64(aes_encrypt(cast(test as binary), cast('qwertyuiopasdfgd' as binary), cast('xxywosjdapdiawdk' as binary),'ECB')) -
処理結果:
{ "result": "xh6A2VwoVuojfuA0CHuLBQ==", "test": "aliyuntest" }
例 3: OFB ストリームモードを使用してデータを暗号化します。
元のログ: {"test":"aliyuntest"}
-
処理ルール
* | extend result=to_base64(aes_encrypt(cast(test as binary), cast('qwertyuiopasdfgd' as binary), cast('xxywosjdapdiawdk' as binary),'OFB')) -
処理結果:
{ "result": "lBQuflXuEE2/bQ==", "test": "aliyuntest" }
aes_decrypt 関数
aes_decrypt 関数は、AES で暗号化されたバイナリデータを復号します。
構文
aes_decrypt(data, key, iv, mode, pad_style)
パラメーター
|
パラメーター |
型 |
必須 |
説明 |
|
data |
バイナリ |
はい |
復号する暗号文データ。 |
|
key |
バイナリ |
はい |
復号に使用されるキー。 |
|
iv |
バイナリ |
はい |
復号のための初期化ベクトル (IV)。 |
|
mode |
文字列 |
いいえ |
AES 復号モード。デフォルト値: CBC。有効な値: CBC (Cipher Block Chaining)、ECB (Electronic Code Book)、OFB (Output Feedback)、CFB (Cipher Feedback)、CTR (Counter)。 |
|
pad_style |
文字列 |
いいえ |
パディングスタイル。このパラメーターはブロックモード (CBC および ECB) でのみ有効です。デフォルト値: pkcs7。有効な値: pkcs7 (PKCS#7 パディング)、iso7816 (ISO 7816 パディング)、x923 (ANSI X.923 パディング)。 |
戻り値の型
バイナリ (プレーンテキストのバイト、UTF-8 エンコーディングを使用してテキストとして表示)
例
例 1: CBC で暗号化されたデータを復号します (Base64 入力)。
元のログ: {"test":"gXIqu0cBBtZHQxJBK8GLeA=="}
-
処理ルール
* | extend result=aes_decrypt(cast(from_base64(test) as binary), cast('qwertyuiopasdfgd' as binary), cast('xxywosjdapdiawdk' as binary)) -
処理結果:
{ "test": "gXIqu0cBBtZHQxJBK8GLeA==", "result": "aliyuntest" }
例 2: OFB ストリームモードで暗号化されたデータを復号します。
元のログ: {"test": "lBQuflXuEE2/bQ=="}
-
処理ルール
* | extend result=cast(aes_decrypt(cast(from_base64(test) as binary), cast('qwertyuiopasdfgd' as binary), cast('xxywosjdapdiawdk' as binary), 'OFB') as varchar) -
処理結果:
{ "test": "lBQuflXuEE2/bQ==", "result": "aliyuntest" }
例 3: ECB モードで暗号化されたデータを復号します。
元のログ: {"test": "xh6A2VwoVuojfuA0CHuLBQ=="}
-
処理ルール
* | extend result=cast(aes_decrypt(cast(from_base64(test) as binary), cast('qwertyuiopasdfgd' as binary), cast('xxywosjdapdiawdk' as binary), 'ECB') as varchar) -
処理結果:
{ "test": "xh6A2VwoVuojfuA0CHuLBQ==", "result": "aliyuntest" }