2017-11-07 7 views
1

ハイブQLで2つの繰り返しのアンダースコアの間にある可変長の文字列を抽出したいと思います。以下では、行のパターンのサンプリングを示します。具体的には、3番目と4番目のアンダースコアの間の文字列を抽出したいと思います。ありがとう!Hive SQL 2つの非英数字の間で可変長の文字列を抽出します。

2016_sadfsa_IL_THIS_xsdaf_asd_eventbyevent_tsaC_NA_300x250 
2017_thisshopper_MA_THIS_NAT_Leb_ReasonsWhy_HDIMC_NA_300x600 
2017_FordShopper_IL_THESE_NAT_sov_winterEvent_HDIMC_NA_300x600 

これまでの回答から非ハイブSQLに変更しました。私はまだこれを行うより良い方法を知ることに興味があります。

select creative_str, ltrim(rtrim(substring(regexp_replace(cast(creative_str as varchar(1000)), '_', repeat(cast(' ' as varchar(1000)),10000)), 30001, 10000))) 
from impression_cr 

答えて

1

あなたはハイブのSPLIT()機能でこれを行うことができるはず:creative_strは列の名前であることに注意してください。 3番目と4番目のアンダースコアの間で値を取得しようとしている場合は、これを行います:

SELECT SPLIT("2016_sadfsa_IL_THIS_xsdaf_asd_eventbyevent_tsaC_NA_300x250", "[_]")[3], 
     SPLIT("2017_thisshopper_MA_THIS_NAT_Leb_ReasonsWhy_HDIMC_NA_300x600", "[_]")[3], 
     SPLIT("2017_FordShopper_IL_THESE_NAT_sov_winterEvent_HDIMC_NA_300x600", "[_]")[3] 
関連する問題