Эквивалент функции Presto REPLACE в Hive

У меня есть состояние в настоящее время в престо, как показано ниже

replace(replace(replace(replace(replace(replace(replace(replace(UPPER(FIELDNAME),' ',''),'LLC',''),'INC',''),'INTERNATIONAL',''),'LTD',''),'.',''),',',''),'QMT','')

Какой будет эквивалентная функция в Hive, которая будет служить точно такой же цели? Будет ли regexp_replace работать для описанного выше сценария?

Использовал regexp_replace в приведенном выше условии вместо замены, но это выдает мне следующую ошибку.

FAILED: SemanticException [Error 10014]: Line 1:255 Wrong arguments ''('': No matching method for class org.apache.hadoop.hive.ql.udf.UDFRegExpReplace with (string, string). Possible choices: _FUNC_(string, string, string) (state=42000,code=10014)

Было бы здорово, если бы кто-то мог помочь в этом. Спасибо


person jahan    schedule 14.01.2021    source источник


Ответы (1)


Это правда. regexp_replace — это команда, которую вы можете использовать. Вы можете указать список подстрок для замены в виде списка, разделенного символом '|' и вам нужно использовать '\', чтобы указать любые специальные символы, которые могут действовать как подстановочные знаки, такие как - . или же ? или * и т. д. Ниже приведен пример использования.

SELECT regexp_replace(upper(fieldname),'LTD|QMT|INTERNATIONAL|ORG|INC|\\.|,| ','') from my_table;
person Janki Vyas    schedule 14.01.2021
comment
приведенный выше вариант отлично работает для упомянутого запроса, но есть другое условие, как показано ниже, replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(upper(pod.fieldname),' ',''),'.',''),')',''),'('),',',''),'-',''),'/',''),'&',''),'_',''),'''','') . Это вызывает ошибку вокруг '''','' . ошибка показана в исходном сообщении. Любое обходное решение? - person jahan; 15.01.2021
comment
В своих функциях замены вы забыли использовать строку для замены '('. Используйте ниже: ,''),'.',''),')',''),'(',''),',',''),'-',''),'/',' '),'&',''),'_',''),'''','') - person Janki Vyas; 15.01.2021
comment
На самом деле я использовал regexp_replace для этого, и это работает. Единственным недостатком является. не работает, когда я пытаюсь разобрать его в yaml. поэтому я должен использовать translate(regexp_replace(fieldname), |,|-|_|,''),'.','') - person jahan; 15.01.2021