2017-02-21 8 views
1

カラムのフィールドから最後の10個の数値を抽出したいので、ハイブに組み込み関数を使用しています。しかし、フィールド値が定義された値(< 10)より小さい場合。その '空白'フィールドを返します。 入力: 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

答えて

1

ライン

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 の終わりから10文字まで取得します


ここで空白が表示されます。
substrの機能が悪いようです。

UDFSubstr.java

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

... 
+1

@TobySpeight - 私は答えを編集しました。 * **(1)**答えの範囲は、時間、インターネットの可用性、コンピュータの可用性、および投稿自体の品質/レベルの制限があります。この特定の答えは私がエレベーターを待っている間に私の携帯電話から与えられました。 **(2)** SO答えはチュートリアルとして機能するのではなく、特定の問題を解決することを意図しています。 **(3)**私はあなたに私の他の答えのいくつかを見てみましょう –

+0

更新された答えをチェックしてください –

関連する問題