2016-10-20 8 views
0

これまでに解決策が見つかりませんでした。 固定長ファイルをコントロールAに分割する必要がありますが、ファイルパターンはatrributeの1つ、つまりそのレコードのスキーマが変更されたrecord_typeに基づいています。この固定ファイルを誰が区切りファイルに変換できるかはわかりません。Hadoopでの条件付きファイルの処理

サンプルレコード:

NCBDX**DD**00C98    0002016-01-0402.30.33013000895527  821064  07.30.332016-01-0400895527  000000 
NCBDX**DT**00C98   5108050000007851 000821064         0R 

Abinitio DML :- 
record //RECORD-START 
    ascii string(1) RECORD_PREFIX; 
    ascii string(4) TRANSMISSION_PROCESS; 
    ascii string(2) RECORD_TYPE; 
    ascii string(5) HEADER_INSTITUTION_ID; 
    ascii string(11) HEADER_PREFIX_NUMBER; 
if (record_type=="DT") //Changed single quotes to double quotes - Sathish Ethiraj 
    record //digital_transaction_rec 
     ascii string("\001") dt_cardholder_account_number=NULL(""); 
     ascii decimal("\001") dt_member_number=NULL(""); 
     ascii string("\001") dt_terminal_sequence_number=NULL(""); 
     ascii string("\001") dt_tokenization_message_type=NULL(""); 
     ascii string("\001") dt_payment_token=NULL(""); 
     ascii string("\001") dt_token_expiration_date=NULL(""); 
     ascii string("\001") dt_account_number_indicator=NULL(""); 
     ascii string("\001") dt_tokenization_event_indicator=NULL(""); 
     ascii string("\001") dt_transaction_status_indicator=NULL(""); 
     ascii string("\001") dt_transaction_category_code=NULL(""); 
     ascii string("\001") dt_payment_initiation_channel=NULL(""); 
     ascii string("\001") dt_wallet_program_indicator=NULL(""); 
     ascii string("\001") dt_on_behalf_service_1=NULL(""); 
     ascii string("\001") dt_on_behalf_service_2=NULL(""); 
     ascii string("\001") dt_on_behalf_result_1=NULL(""); 
     ascii string("\001") dt_on_behalf_result_2=NULL(""); 
     ascii string("\001") dt_primary_account_number_source=NULL(""); 
     ascii string("\001") dt_payment_appn_instance_id=NULL(""); 
if (record_type=="DD") 
    record // DOLLAR-LOG-REC 
     ascii string("\001") dd_hdr_instun_id =NULL(""); 
     ascii string("\001") dd_hdr_prfx_num =NULL(""); 
     ascii string("\001") dd_cdhldr_acct_num =NULL(""); 
     ascii string("\001") dd_mbr_num =NULL(""); 
     ascii string("\001") dd_mtv_trxn_dt =NULL(""); 
     ascii string("\001") dd_mtv_trxn_tm =NULL(""); 
     ascii string("\001") dd_trxn_rqst_type_cd =NULL(""); 
     ascii string("\001") dd_trmnl_num =NULL(""); 
     ascii string("\001") dd_trmnl_seq_num =NULL(""); 

私はHIVEにSUBSTR関数とロードを使用してみましたが、条件を置くことができないのです。この点に関する助けは非常に役に立ちます。

答えて

2

ハイブのテーブルには、入力に応じて変更できない定義済みのスキーマが必要です。 入力ファイルをrecord_type == "DT"とrecord_type == "DD"の2つのファイルに分割することができます。それらのそれぞれを別のテーブルにロードします。

+0

ありがとうアレックス、私たちはブタを使ってファイルを分割しています、私はHIVEで同じことをしようとしていました。 – Shrikant

関連する問題