【问题标题】:how to replace characters in hive?如何替换蜂巢中的字符?
【发布时间】:2013-08-08 01:37:41
【问题描述】:

我在 hive 表中有一个字符串列 description,其中可能包含制表符 '\t',但是当将 hive 连接到外部应用程序时,这些字符会弄乱一些视图。 有没有一种简单的方法来摆脱该列中的所有制表符?我可以运行一个简单的 python 程序来做到这一点,但我想为此找到一个更好的解决方案。

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    regexp_replace UDF 执行我的任务。以下是 apache Wiki 的定义和用法。

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

    这将返回替换INITIAL_STRING中的所有子字符串所产生的字符串 将PATTERN 中定义的java 正则表达式语法与REPLACEMENT 的实例相匹配,

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

    【讨论】:

      【解决方案2】:

      自定义 SerDe 可能是一种方法。或者您可以使用某种带有 regex_replace 的中介过程:

      create table tableB as 
      select 
          columnA
          regexp_replace(description, '\\t', '') as description
      from tableA
      ;
      

      【讨论】:

      • 这应该是 regexp_replace 而不是 regex_replace,到目前为止它似乎正在工作
      【解决方案3】:
      select translate(description,'\\t','') from myTable;
      

      通过将 from 字符串中的字符替换为 to 字符串中的相应字符来翻译输入字符串。这类似于 PostgreSQL 中的翻译功能。如果此 UDF 的任何参数为 NULL,则结果也为 NULL。 (从 Hive 0.10.0 开始可用,适用于字符串类型)

      从 Hive 0.14.0 开始添加对 Char/varchar 的支持

      【讨论】:

      • 欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
      【解决方案4】:

      你也可以使用 translate()。如果第三个参数太短,则从第二个参数中删除相应的字符。与 regexp_replace() 不同,您无需担心特殊字符。 Source code.

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

      【讨论】:

        【解决方案5】:

        目前没有允许这样做的 OOTB 功能。实现这一目标的一种方法可能是编写一个自定义的 InputFormat 和/或 SerDe 来为您执行此操作。您可能对这个 JIRA 有用:https://issues.apache.org/jira/browse/HIVE-3751。 (虽然与您的问题没有直接关系)。

        【讨论】:

        • 我觉得这个答案已经过时了,尽管 JIRA 没有被关闭
        猜你喜欢
        • 2018-08-11
        • 1970-01-01
        • 1970-01-01
        • 2020-12-18
        • 2016-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多