2017-12-30 67 views
1

Ich versuche, Funken sql kleine Dateien Problem mit dem oben genannten Ansatz zu lösen, in meiner Organisation Benutzer übergeben in SQL-Anweisungen zum Beispiel.separate Select-Klausel und Einfügen von Klausel aus SQL-String

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

Ich kann die oben SQL in Funken SQL Problem laufen ist es kleine Dateien erzeugt im Vergleich mit Bienenstock, die hat (merge kleine Dateien = true) Option etc ..., die nicht SQL in Funken funktionieren.

Ich kam mit einer Arbeit um wie Benutzer sql Anweisung nehmen und in zwei Teile select-Klausel und Einfügeklausel, von der Select-Klausel Datenframe zuerst erstellen und schätzen Größe und berechnen Ausgabedateien und Einfügen in Zieltabelle unten ist die Beispiel.

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)") 

Gibt es eine Regex-Funktion oder eine Bibliothek in Java/Scala, die select-Klausel trennen kann und Klausel aus einem SQL-Zeichenfolge einfügen?

Dank

Antwort

0

ich den folgenden regulären Ausdruck verwenden würde:

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

Die erste Capture-Gruppe enthält die INSERT Anweisung und die zweite enthält die SELECT Aussage. Natürlich wird eine Unterscheidung zwischen Groß- und Kleinschreibung empfohlen. Sie können eine funktionierende Demo sehen here.

Verwandte Themen