hive 多重替换,全角转半角

操作hive中,遇到oracle的to_single_byte()函数,发现hive中不支持该函数,查看文章发现有直接sql进行多重替换 和 先在程序中进行处理两种方法。

        此处,参考其他博主文章,发现一种多重嵌套sql方法,不过有一处需要进行修改,不易查找

SELECT "abc12; 345" AS old,
CASE 
WHEN regexp_extract("abc12; 345", '[\\uFF01-\\uFF60]+', 0) != '' 
THEN regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace("abc12; 345", '(\\ )', ' ')
, '(\\!)', '!')
, '(\\")', '"')
, '(\\#)', '#')
, '(\\$)', '$')
, '(\\%)', '%')
, '(\\&)', '&')
, '(\\')', "'")
, '(\\()', '(')
, '(\\))', ')')
, '(\\*)', '*')
, '(\\+)', '+')
, '(\\,)', ',')
, '(\\-)', '-')
, '(\\.)', '.')
, '(\\/)', '/')
, '(\\0)', '0')
, '(\\1)', '1')
, '(\\2)', '2')
, '(\\3)', '3')
, '(\\4)', '4')
, '(\\5)', '5')
, '(\\6)', '6')
, '(\\7)', '7')
, '(\\8)', '8')
, '(\\9)', '9')
, '(\\:)', ':')
, '(\\<)', '<')
, '(\\=)', '=')
, '(\\>)', '>')
, '(\\?)', '?')
, '(\\@)', '@')
, '(\\A)', 'A')
, '(\\B)', 'B')
, '(\\C)', 'C')
, '(\\D)', 'D')
, '(\\E)', 'E')
, '(\\F)', 'F')
, '(\\G)', 'G')
, '(\\H)', 'H')
, '(\\I)', 'I')
, '(\\J)', 'J')
, '(\\K)', 'K')
, '(\\L)', 'L')
, '(\\M)', 'M')
, '(\\N)', 'N')
, '(\\O)', 'O')
, '(\\P)', 'P')
, '(\\Q)', 'Q')
, '(\\R)', 'R')
, '(\\S)', 'S')
, '(\\T)', 'T')
, '(\\U)', 'U')
, '(\\V)', 'V')
, '(\\W)', 'W')
, '(\\X)', 'X')
, '(\\Y)', 'Y')
, '(\\Z)', 'Z')
, '(\\[)', '[')
, '(\\\)', '\\')
, '(\\])', ']')
, '(\\^)', '^')
, '(\\_)', '_')
, '(\\`)', '`')
, '(\\a)', 'a')
, '(\\b)', 'b')
, '(\\c)', 'c')
, '(\\d)', 'd')
, '(\\e)', 'e')
, '(\\f)', 'f')
, '(\\g)', 'g')
, '(\\h)', 'h')
, '(\\i)', 'i')
, '(\\j)', 'j')
, '(\\k)', 'k')
, '(\\l)', 'l')
, '(\\m)', 'm')
, '(\\n)', 'n')
, '(\\o)', 'o')
, '(\\p)', 'p')
, '(\\q)', 'q')
, '(\\r)', 'r')
, '(\\s)', 's')
, '(\\t)', 't')
, '(\\u)', 'u')
, '(\\v)', 'v')
, '(\\w)', 'w')
, '(\\x)', 'x')
, '(\\y)', 'y')
, '(\\z)', 'z')
, '(\\{)', '{')
, '(\\|)', '|')
, '(\\})', '}')
, '(\\~)', '~')
, '(\\;)', '\073')        此处需要注意
ELSE '无需处理' END as new

在倒数第二行,将全角分号替换成分号,但是直接分号填进去的话,会报错,因为分号是sql的结束符,在HDFS中识别不了,因此需要用分号的二进制\073来表示

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值