TRY_URL_DECODE

功能概述

对

application/x-www-form-urlencoded
application/x-www-form-urlencoded
格式的字符串做 URL 解码,解码失败时返回 NULL 而不是报错。用法与 URL_DECODE 相同,适合处理来源不可控的日志、埋点数据:其中个别行编码不合法时,
URL_DECODE
URL_DECODE
会让整个查询失败,
TRY_URL_DECODE
TRY_URL_DECODE
只让这一行返回 NULL。

语法

TRY_URL_DECODE(<str>)

参数说明

  • <str>
    <str>
    :STRING 类型,URL 编码的字符串。
    %XX
    %XX
    解码为对应字节,
    +
    +
    解码为空格。以下情况返回 NULL:
    • %
      %
      后不足两位或不是合法的十六进制,如
      '%'
      '%'
      、
      '%2spark'
      '%2spark'
    • 包含未编码的
      %s
      %s
      等不合法序列
    • <str>
      <str>
      为 NULL

使用示例

SELECT try_url_decode('http%3A%2F%2Fspark.apache.org%2Fpath%3Fquery%3D%26key%3D+2') AS ok, try_url_decode('%') AS bad1, try_url_decode('http%3A%2F%2spark.apache.org') AS bad2;

okbad1bad2
http://spark.apache.org/path?query=&key= 2NULLNULL

+
+
被解码为空格;
bad2
bad2
中的
%2s
%2s
不是合法的十六进制编码。

清洗埋点 URL,把无法解码的行单独标出:

SELECT raw, try_url_decode(raw) AS decoded, try_url_decode(raw) IS NULL AS is_bad FROM VALUES ('page%3Dhome%26from%3Dsearch'), ('kw%3D%E5%92%96%E5%95%A1'), ('broken%E5%') AS t(raw);

rawdecodedis_bad
page%3Dhome%26from%3Dsearchpage=home&from=searchfalse
kw%3D%E5%92%96%E5%95%A1kw=咖啡false
broken%E5%NULLtrue

注意事项

  • 只在需要容错时使用。数据质量有保证时用
    URL_DECODE
    URL_DECODE
    ,可以及早发现异常数据。

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询