将特定列中的每个字符增加到下一个字符 - hive

时间:2018-02-14 14:44:53

标签: hive decode hiveql

我正在开发蜂巢。我希望通过将每个字符增加到3来解码name列中的所有记录。例如,如果名称为abc我想要cde。如何使用配置单元执行此操作?

1 个答案:

答案 0 :(得分:0)

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

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

OLD方法(不要使用)

您可以结合使用拆分,转换为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;

<强> O / P:

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