【问题标题】:substring() returns blank in hivesubstring() 在配置单元中返回空白
【发布时间】:2017-02-21 10:54:21
【问题描述】:

我想从一列的字段中提取最后 10 个数字,所以我在 hive 中使用内置函数的子字符串。但是如果字段值小于定义值(orig_number 140976526012 140980434512 1740016 1740016 17250460171 我正在使用此代码。 select *,length(orig_number) as leng,substr(orig_number,-10) as subbstring from num_table sort by orig_number; 输出是:

orig_number leng subbstring 140976526012 12 0976526012 140980434512 12 140980434512 1740016 7
1740016 7
17250460171 11 725046017

【问题讨论】:

    标签: sql hadoop hive substring hiveql


    【解决方案1】:

    从行尾最多检索 10 个字符

    select  orig_number
           ,regexp_extract (orig_number,'.{1,10}$',0)   as orig_number_suffix 
    
    from    num_table
    ;
    

    +--------------+--------------------+
    | orig_number  | orig_number_suffix |
    +--------------+--------------------+
    | 140976526012 |         0976526012 |
    | 140980434512 |         0980434512 |
    |      1740016 |            1740016 |
    |      1740016 |            1740016 |
    |  17250460171 |         7250460171 |
    +--------------+--------------------+
    

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html


    这就是你得到空白的原因。
    在我看来,substr 函数的设计很糟糕。

    UDFSubstr.java

    private int[] makeIndex(int pos, int len, int inputLen) {
        if ((Math.abs(pos) > inputLen)) {
          return null;
        }
    
    ...
    

    【讨论】:

    • @TobySpeight - 我已经编辑了答案。话虽如此 - (1) 答案的范围受时间、互联网可​​用性、计算机可用性以及帖子本身的质量/兴趣水平的限制。这个具体的答案是我在等电梯时用手机给出的。 (2) 请记住,SO 答案并非旨在用作教程,而是用于解决特定问题。 (3) 我邀请你看看我的其他一些答案
    猜你喜欢
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 2020-01-25
    • 2018-03-22
    • 2017-09-08
    相关资源
    最近更新 更多