本文介绍二进制函数的基本语法及示例。
日志服务支持如下二进制函数。
-
在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status或"status"表示日志字段status。
-
varbinary类型是二进制字符类型,varchar类型是可变长度字符类型。
|
函数名称 |
语法 |
说明 |
支持SQL |
支持SPL |
|
from_base64(x) |
将BASE64编码的字符串解码为二进制类型的数据。 |
√ |
√ |
|
|
from_base64url(x) |
使用URL安全字符将BASE64编码的字符串解码为二进制类型的数据。 |
√ |
× |
|
|
from_big_endian_64(x) |
将大端模式的二进制类型的数据转化成数字。 |
√ |
× |
|
|
from_hex(x) |
将十六进制类型的数据转化成二进制类型的数据。 |
√ |
√ |
|
|
length(x) |
计算二进制类型的数据的长度。 |
√ |
× |
|
|
md5(x) |
对二进制类型的数据进行MD5编码。 |
√ |
√ |
|
|
to_base64(x) |
对二进制类型的数据进行BASE64编码。 |
√ |
√ |
|
|
to_base64url(x) |
使用URL安全字符将二进制类型的数据进行BASE64编码。 |
√ |
× |
|
|
to_hex(x) |
将二进制类型的数据转化成十六进制类型的数据。 |
√ |
√ |
|
|
to_big_endian_64(x) |
将数字转化为大端模式的二进制类型的数据。 |
√ |
× |
|
|
sha1(x) |
对二进制类型的数据进行SHA1加密。 |
√ |
√ |
|
|
sha256(x) |
对二进制类型的数据进行SHA256加密。 |
√ |
√ |
|
|
sha512(x) |
对二进制类型的数据进行SHA512加密。 |
√ |
√ |
|
|
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 |
参数值为binary类型。 |
返回值类型
varbinary类型。
varbinary类型存在不可见字符,返回结果仍以BASE64编码格式展示。
-
如果返回值是二进制类型的不可见字符,则您可以使用to_hex函数将其转换为十六进制类型的数据。
-
如果返回值是二进制类型的可见字符,则您可以使用from_utf8函数将其转换为UTF-8字符串。
示例
将BASE64编码的字符串解码为二进制类型的数据后,再转换为十六进制类型的数据。
-
查询和分析语句
* | SELECT to_hex(from_base64('c2xz')) -
查询和分析结果:查询返回结果 _col0 列的值为
736C73。
from_base64url函数
from_base64url函数使用URL安全字符将BASE64编码的字符串解码为二进制类型的数据。
语法
from_base64url(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为binary类型。 |
返回值类型
varbinary类型。
varbinary类型存在不可见字符,返回结果仍以BASE64编码格式展示。
-
如果返回值是二进制类型的不可见字符,则您可以使用to_hex函数将其转换为十六进制类型的数据。
-
如果返回值是二进制类型的可见字符,则您可以使用from_utf8函数将其转换为UTF-8字符串。
示例
使用URL安全字符将BASE64编码的字符串解码为二进制类型的数据。
-
查询和分析语句
* | SELECT to_hex(from_base64url('c2xz')) -
查询和分析结果:查询返回结果 _col0 列的值为
736C73。
from_big_endian_64函数
from_big_endian_64函数用于将大端模式的二进制类型的数据转化成数字。
语法
from_big_endian_64(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为binary类型。 |
返回值类型
bigint类型。
示例
将大端模式的二进制类型的数据(10)转化成数字。
-
查询和分析语句
* | SELECT from_big_endian_64(to_big_endian_64(10)) -
查询和分析结果为
10。
from_hex函数
from_hex函数将十六进制类型的数据转化成二进制类型的数据。
语法
from_hex(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为varbinary类型。 |
返回值类型
varbinary类型。
示例
将十六进制类型的数据(D74D)转换为二进制类型的数据。
-
查询和分析语句
* | SELECT from_hex('D74D') -
查询和分析结果:
_col0列的值为100=。
length函数
length函数用于计算二进制类型的数据的长度。
语法
length(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为binary类型。 |
返回值类型
bigint类型。
示例
计算region字段值的长度。
-
查询和分析语句
* | SELECT length('00101000') -
查询和分析结果返回值为
8,即字符串00101000的长度。
md5函数
md5函数用于对二进制类型的数据进行MD5编码。
语法
md5(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为varbinary类型。 |
返回值类型
varbinary类型。
示例
对二进制类型的数据(1101)进行MD5编码。
-
查询和分析语句
* | SELECT MD5(from_base64('1101')) AS md5 -
查询和分析结果:md5的值为
rG3lOanun9N57opubMnPDw==。
to_base64函数
to_base64函数用于对二进制类型的数据进行BASE64编码。
语法
to_base64(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为binary类型。 |
返回值类型
varchar类型。
示例
对二进制类型的数据(10)进行BASE64编码。
-
查询和分析语句
* | SELECT to_base64(from_base64('10')) AS base64 -
查询和分析结果:base64列的值为
1w==。
to_base64url函数
to_base64url函数使用URL安全字符对二进制类型的数据进行BASE64编码。
语法
to_base64url(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为binary类型。 |
返回值类型
varchar类型。
示例
使用URL安全字符对二进制类型的数据(100)进行BASE64编码。
-
查询和分析语句
* | SELECT to_base64url(from_base64('100')) -
查询和分析结果

to_hex函数
to_hex函数用于将二进制类型的数据转化成十六进制类型的数据。
语法
to_hex(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为binary类型。 |
返回值类型
varchar类型。
示例
将二进制类型的数据(100)转化成十六进制类型的数据。
-
查询和分析语句
* | SELECT to_hex(from_base64('100')) -
查询和分析结果:
_col0列的值为D74D。
to_big_endian_64函数
to_big_endian_64函数用于将数字转化为大端模式的二进制类型的数据。
语法
to_big_endian_64(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为bigint类型。 |
返回值类型
varbinary类型。
示例
将数字0转换为大端模式的二进制类型的数据。
-
查询和分析语句
* | SELECT to_big_endian_64(0) -
查询和分析结果

sha1函数
sha1函数用于对二进制类型的数据进行SHA1加密。
语法
sha1(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为binary类型。 |
返回值类型
varbinary类型。
示例
对二进制类型的数据(1101)进行SHA1加密。
-
查询和分析语句
* | SELECT sha1(from_base64('1101')) AS sha1 -
查询和分析结果

sha256函数
sha256函数用于对二进制类型的数据进行SHA256加密。
语法
sha256(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为binary类型。 |
返回值类型
varbinary类型。
示例
对二进制类型的数据(1101)进行SHA256加密。
-
查询和分析语句
* | SELECT sha256(from_base64('1101')) AS sha256 -
查询和分析结果

sha512函数
sha512函数用于对二进制类型的数据进行SHA512加密。
语法
sha512(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为binary类型。 |
返回值类型
varbinary类型。
示例
对二进制类型的数据(1101)进行SHA512加密。
-
查询和分析语句
* | SELECT sha512(from_base64('1101')) AS sha512 -
查询和分析结果

xxhash64函数
xxhash64函数用于对二进制类型的数据进行xxHash64加密。
语法
xxhash64(x)
参数说明
|
参数 |
说明 |
|
x |
参数值为binary类型。 |
返回值类型
varbinary类型。
示例
对二进制类型的数据(10)进行xxhash64加密。
-
查询和分析语句
* | SELECT xxhash64(from_base64('10')) -
查询和分析结果

aes_encrypt函数
aes_encrypt函数用于对数据进行 AES 加密。高级加密标准 AES(Advanced Encryption Standard)为最常见的对称加密算法,支持 CBC、ECB、OFB、CFB、CTR 多种加密模式,以及多种填充方式。
语法
aes_encrypt(data, key, iv, mode, pad_style)
参数说明
|
参数名称 |
参数类型 |
是否必填 |
说明 |
|
data |
Binary |
是 |
需要被加密的明文数据。支持非常量值。 |
|
key |
Binary |
是 |
加密数据使用的密钥。 |
|
iv |
Binary |
是 |
加密使用偏移量。 |
|
mode |
String |
否 |
AES 加密模式。默认值为 CBC。可取值包括:CBC(默认值):Cipher Block Chaining、ECB:Electronic Code Book、OFB:Output FeedBack、CFB:Cipher FeedBack、CTR:Counter。 |
|
pad_style |
String |
否 |
填充模式。仅对块模式(CBC、ECB)生效,流模式(OFB、CFB、CTR)不依赖填充。默认为 pkcs7。可取值包括:pkcs7(默认值):PKCS#7 填充、iso7816:ISO 7816 填充、x923:ANSI X.923 填充。 |
返回值类型
Binary 类型的加密结果。
示例
示例 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 |
Binary |
是 |
需要被解密的密文数据。 |
|
key |
Binary |
是 |
解密数据使用的密钥。 |
|
iv |
Binary |
是 |
解密使用偏移量。 |
|
mode |
String |
否 |
AES 解密模式。默认值为 CBC。可取值包括:CBC(默认值):Cipher Block Chaining、ECB:Electronic Code Book、OFB:Output FeedBack、CFB:Cipher FeedBack、CTR:Counter。 |
|
pad_style |
String |
否 |
填充模式。仅对块模式(CBC、ECB)生效,流模式(OFB、CFB、CTR)不依赖填充。默认为 pkcs7。可取值包括:pkcs7(默认值):PKCS#7 填充、iso7816:ISO 7816 填充、x923:ANSI X.923 填充。 |
返回值类型
Binary 类型的解密结果(明文字节),按 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"}
