2017-05-29 14 views
1

入力フラットファイルでいくつかの変換を実行しようとしています。私がここで直面している実際の問題は、私の入力ファイルが111のフィールドで構成されていることです。だから私はこれらの多くのフィールドの変換を行うことができます。ハイブで複雑な変換を実行する機能

私はUDFを使用するオプションを持っていますが、どうすれば111のフィールドをUDFに渡すことができますか?それは可能ですか?私のテーブルの全フィールドをUDFに渡すことができる方法はありますか?

これは、ここに私のサンプル出力

Testing DV005 JayendranArumugam MALE 
CAR2016053120160730 
TRAIN0000000000000000 
VAN0000000000000000 
TRUCK0000000000000000 
JEEP0000000000000000 
PLANE2015090120160831 

A|Adding||Testing|DV005|   |7425478987|10    |  |Jayendran  |             |Arumugam           |V|  |MALE|19711028|101   |N|01|    |Candy|    |1312 WEST 10TH STREET        |             |AUSTIN           |TX|             |78703 |840            |    |5127768623|    |8009238-12345678912|A|B|H|01500|03000|Chocalates           |8009238||RAPID 7 LLC     |20130501|00000000|    |000|    |    | |  |  | |  |  |    |        |        |N |BUS|20150901|20160831|0000000000|0000000001|    |8009238-999940185-002348025-CAR|960230702-CAR-002348025-20150901|Y |CAR|20160531|20160730|0000000011|0000001321|8009238-999940185-002348025-TRAIN|960230702-TRAIN-002348025-20150901|N |TRAIN|20150901|20160831|0000000000|0000000000|         |        |N |VAN|20150901|20160831|    |0000000000|0000000000|       |      |    |N |TRUCK|20150101|20991231|         |        |N |JEEP|  |  |0000000000|0000000000|         |        |Y |PLANE|20150901|20160831|    |20160319002530000001  

私の入力ファイルである私の解決策事前に

おかげ

ジェイ

+0

http://xyproblem.info/を読み、もう一度お願いします。解決策について何も想定しないでください。入力データのサンプルと必要な結果を表示します。ファイルのボリュームと行数も便利です。 –

+0

私の質問とサンプルの入力と出力が更新されました。私の入力ファイルでは、実際には私の出力の7行複数行に変換する1行を使用します。しかし、場合によってはもっと多くの行(inputfile)入力ファイルから各行に対応する7行。 – Jayendran

+0

入力ファイルが奇妙に見えます。区切られた書式、固定幅書式、または組み合わせ(?)であるかどうかは不明です –

答えて

0
を見つけるためにここに私を助けてください
create external table mytable (rec string) 
location '/... put the location here ...' 
tblproperties ('serialization.last.column.takes.rest'='true')  
; 

select explode 
     (
      array 
      (
       concat_ws(' ',f[3],f[4],concat(f[9],f[11]),f[14]) 
       ,concat(f[ 67] ,case when f[ 66] = 'Y' then concat(f[ 68] ,f[ 69]) else '0000000000000000' end) 
       ,concat(f[ 75] ,case when f[ 74] = 'Y' then concat(f[ 76] ,f[ 77]) else '0000000000000000' end) 
       ,concat(f[ 83] ,case when f[ 82] = 'Y' then concat(f[ 84] ,f[ 85]) else '0000000000000000' end) 
       ,concat(f[ 93] ,case when f[ 92] = 'Y' then concat(f[ 94] ,f[ 95]) else '0000000000000000' end) 
       ,concat(f[ 99] ,case when f[ 98] = 'Y' then concat(f[100] ,f[101]) else '0000000000000000' end) 
       ,concat(f[107] ,case when f[106] = 'Y' then concat(f[108] ,f[109]) else '0000000000000000' end) 
      ) 
     ) 

from (select split(rec,'\\s*\\|\\s*') as f 
     from mytable 
     ) t 
; 

+--------------------------------------+ 
|     col     | 
+--------------------------------------+ 
| Testing DV005 JayendranArumugam MALE | 
| CAR2016053120160730     | 
| TRAIN0000000000000000    | 
| VAN0000000000000000     | 
| TRUCK0000000000000000    | 
| JEEP0000000000000000     | 
| PLANE2015090120160831    | 
+--------------------------------------+ 
関連する問題