2017-10-06 6 views
0

bashスクリプトを使用してcsvsをHDFSに移動し、外部Hiveテーブルを構築することでデータパイプラインを自動化します。現在のところ、これはテーブルのフォーマットが.hqlファイルであらかじめ定義されている場合にのみ機能します。しかし、私はCSVからヘッダーを読んで、ハイヴの議論としてそれらを送ることができるようにしたい。だから、現在、私は、ファイルをループ内でこれを行う:bashを使用してハイブスクリプトに可変数のフィールドを送信する

これに送られる
# bash 
hive -S -hiveconf VAR1=$target_db -hiveconf VAR2=$filename -hiveconf VAR3=$target_folder/$filename -f create_tables.hql 

...

-- hive 
CREATE DATABASE IF NOT EXISTS ${hiveconf:VAR1};   
CREATE EXTERNAL TABLE IF NOT EXISTS ${hiveconf:VAR1}.${hiveconf:VAR2}( 
    individual_pkey INT,  
    response CHAR(1)   
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LOCATION '/${hiveconf:VAR3}' 

私はハイブスクリプトはより次のようになりたい...

CREATE DATABASE IF NOT EXISTS ${hiveconf:VAR1};   
CREATE EXTERNAL TABLE IF NOT EXISTS ${hiveconf:VAR1}.${hiveconf:VAR2}( 
    ${hiveconf:ROW1} ${hiveconf:TYPE1}, 
    ...    ... 
    ${hiveconf:ROW_N} ${hiveconf:TYPE_N} 

ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LOCATION '/${hiveconf:VAR3}' 

パーズする配列に送信することはできますか?これは実現可能か、それともお勧めですか?

答えて

1

私は結局これを回避する手段を見つけました。

可変数のフィールドを取るHQLスクリプトを実際に書くことはできません。しかし、可変長のHQLスクリプトを生成するbashスクリプトを書くことができます。私は私のチームにこれを実装しましたが、一般的な考え方は、HQLをbashの文字列としてどのように見せたいかを書き出し、次にRscriptのようなものを使用してCSVのデータ型を読み込んで識別します。データ型をCSVヘッダとともに配列として格納し、それらの配列をループして情報をHQLに書き込みます。

関連する問題