【问题标题】:Using regexp_extract in Hive在 Hive 中使用 regexp_extract
【发布时间】:2013-09-02 14:34:09
【问题描述】:

我正在尝试从 hive 表中查找特定列不包含空值或 \N 值或 STX 字符“\002”的行。目标是找出哪些行包含这三个以外的一些字符。

我试过这个蜂巢查询:

    select column1,length(regexp_replace(column1,'\N|\002|NULL','')) as value         
    FROM table1 LIMIT 10;

我期望在以下情况下为零,但我得到以下结果:

    column1 value
    NULL    NULL
            0
    NULL    NULL
            0
    \N\N\N\N\N\N\N\N        8
    NULL    NULL
    \N\N\N\N\N\N\N\N        8
    NULL    NULL
    NULL    NULL
    \N\N\N  3

有人可以帮我解决上述情况的正确正则表达式吗?

谢谢。

拉维

【问题讨论】:

  • 第1列的数据类型是什么?
  • column1 的日期类型是字符串
  • 你不应该避开斜线吗?例如:\\N|\\002|NULL
  • 我试过了,但是得到了以下错误: 原因:java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 1 \N|\002|NULL
  • \N 换行还是文字` followed by N`。

标签: regex hive


【解决方案1】:

看起来 hive 正在使用 Java 的正则表达式引擎,所以问题似乎出在正则表达式本身,更具体地说是转义序列。

尝试以下方法,如果不起作用,请告诉我:

(?:(?:\\\\N)+|\002|NULL)

【讨论】:

    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多