30

descriptionタブ文字を含む可能性のあるハイブテーブルに文字列列があります'\t'が、これらの文字は、ハイブを外部アプリケーションに接続するときに一部のビューを台無しにします。その列のすべてのタブ文字を取り除く簡単な方法はありますか? 簡単なpythonプログラムを実行してそれを行うことができましたが、これに対するより良い解決策を見つけたいと思っています.

4

5 に答える 5

60

regexp_replaceUDF が私のタスクを実行します。以下は、apache Wiki からの定義と使用法です。

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT):

INITIAL_STRING これは、で定義された Java 正規表現構文に一致する のすべての部分文字列をPATTERN、 のインスタンスで置き換えた結果の文字列を返しますREPLACEMENT

例:regexp_replace("foobar", "oo|ar", "")返品fb

于 2013-08-07T08:58:13.023 に答える
12

カスタムSerDeはそれを行う方法かもしれません。または、regex_replace である種の仲介プロセスを使用することもできます。

create table tableB as 
select 
    columnA
    regexp_replace(description, '\\t', '') as description
from tableA
;
于 2013-08-07T05:46:09.330 に答える
4

translate() を使用することもできます。3 番目の引数が短すぎる場合、2 番目の引数から対応する文字が削除されます。regexp_replace() とは異なり、特殊文字について心配する必要はありません。 ソースコード

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringFunctions

于 2015-03-23T21:28:15.553 に答える
0

現時点では、これを可能にする OOTB 機能はありません。これを実現する 1 つの方法は、これを行うカスタム InputFormat および/または SerDe を作成することです。この JIRA が役に立つかもしれません: https://issues.apache.org/jira/browse/HIVE-3751。(ただし、問題とは直接関係ありません)。

于 2013-08-06T21:40:37.807 に答える