2017-12-30 92 views
1

私はスパークSQLの小さなファイルの問題を上記のアプローチを使用して解決しようとしています、私の組織のユーザは、例えばSQL文を渡します。私は、スパークのSQL問題に上記のSQLを実行することができます別のselect句とSQL文の挿入句

insert overwrite table x partition (column1) select * from y; 

はスパークSQLでは動作しません(真=小さなファイルをマージ)オプションなどを...持っているハイブと比較すると、それは小さなファイルを作成しています。

私は、ユーザーのSQLステートメントを取ってselect句とinsert句を2つの部分に分けて、select節からDataframeを最初に作成し、サイズを見積り、出力ファイルを計算し、以下のターゲット表に挿入するような作業を思いついた。例。

val df=sqlContext.sql(select * from y) 
val size=SizeEstimator.estimate(df) 
val outputFiles=size/256000 
df.coleasce(outputFiles).wirte.mode.Append("x partition (column1)") 

sql文字列からselect句とinsert句を区切ることができるJava/Scalaには正規表現関数またはライブラリがありますか?最初のキャプチャグループはINSERT文が含まれています2つ目はSELECTの文が入ります

(.+?) (?=select)(.+) 

おかげ

答えて

0

は、私は次の正規表現を使用します。もちろん、大文字と小文字を区別しない方法が推奨されます。作業デモhereを見ることができます。