将特定列中的每个字符增加到下一个字符-配置单元

avkwfej4  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(283)

我在做Hive。我想解码所有的记录 name 列中的每一个字符数增加到3。如果名称为 `` 我想要 cde . 我怎么能用Hive做这个?

vi4fp9gy

vi4fp9gy1#

编辑:一个更简单的解决方案:使用 TRANSLATE 功能。

SELECT TRANSLATE (name,
                  'abcdefghijklmnopqrstuvwxyz',
                  'defghijklmnopqrstuvwxyzabc')
  FROM yourtable;

旧方法(不使用)
您可以结合使用拆分、转换为ascii、添加再转换和将它们连接回字符串。

WITH t AS
  ( SELECT 'abc' AS name
       UNION ALL
  SELECT 'pqr' AS name
  ) ,
  ASC AS
  (SELECT name,
    ASCII(t1.letter) ascii_number
  FROM t LATERAL VIEW explode(split( REGEXP_REPLACE(name,'(.)' , '$1|') , '\\|') ) t1 AS letter
  )
SELECT name,
  concat_ws('',collect_set( DECODE(unhex(hex(ascii_number+3)), 'US-ASCII') ) ) as name_plus_3
FROM ASC
GROUP BY name;

订单号:

name name_plus_3
----  ----------
abc def        
pqr stu

相关问题