美文网首页
Hive Shell SQL 转义字符问题

Hive Shell SQL 转义字符问题

作者: 六层楼那么高 | 来源:发表于2022-01-27 17:39 被阅读0次

    有一段 Hive sql 代码,通过 shell hive cli 执行,有一段涉及转义字符大代码,大致如下:

    hive -v -e "select lpad(split(app_version, '\\.')[1], 5, '0')"
    

    本义是想通过字符 . 去做 split,但是这样写是错的,正确的写法如下:

    hive -v -e "select lpad(split(app_version, '\\\\.')[1], 5, '0')"
    

    我们解析下这段代码:
    1.通过 shell 执行,shell 本身会转义一次,通过以下代码测试

    echo "split(app_version, '\\.')"
    输出:
    split(app_version, '\.')
    

    2.shell 输出给 hive cli,hive split 接收到'\.' 经过转义后就是 . 问题在于 split 参数接受的是 正则表达式. 在正则是一个特殊字符,表示任意字符,如果想传字符. 就必须再转一次,也就是'\\.'

    总结一下:

    通过 Shell 包装的 hive shell sql 代码,在使用 split 这类函数的时候,对转移字符需要做两次转义,也就是:\\\\.

    通过 beeline 或者 jdbc 调用的只需要 一次转义就行 '\\.'

    相关文章

      网友评论

          本文标题:Hive Shell SQL 转义字符问题

          本文链接:https://www.haomeiwen.com/subject/wppahrtx.html