2016-08-26 3 views
0

Ich versuche, mehrere Hive-Abfragen in Dateien zu teilen, und über sie hinweglaufen und führen Sie sie mit Scala/Funken. Ich benutze .split(";"). Aber es erzeugt ein Problem, wenn die Abfrage selbst ein Semikolon hat.Split mehrere Hive-Abfragen, wenn Abfrage enthält ein Semikolon

select * from table where value='myName\;is\;Name'; 
select * from table; 

Wie kann ich das Semikolon in der ersten Abfrage entkommen und spaltete sich die oben in 2 separate Abfragen in scala

+0

Führt jede Aussage zu einer neuen Zeile? Wenn ja, können Sie teilen durch "\ n" –

+0

Ich bin nicht sicher, wie die Abfrage-Datei ist durch den Benutzer, so kann es alles, was nicht notwendig sein wird auf neue Zeile sein –

+0

Also meinst du, dass Sie nur teilen möchten; und überspringen Sie die \; –

Antwort

0

dieses Muster Lassen Sie prüfen:

.split("(?<!\\\\);") 

In Java, bringe sie eine korrekte Ausgabe, aber ich bin mir nicht sicher, es funktioniert für Sie auf Scala.

Das Muster bedeuten: Finden Sie die; mit nicht \ vorher. Sie können "Negative Blick hinter" Regex für weitere Details finden.

+0

Das funktioniert gut, wenn der Benutzer der entkommen ist; für sich selbst, aber es ist sowieso, wenn die Abfragen wie sind
'wählen * aus der Tabelle, wo Wert = 'meinName; ist; Name'; Wählen Sie * aus der Tabelle; ' –

+0

Dann denke ich, dass Sie eine Regel definieren müssen, um sie zu erkennen. Finde einen Hauptunterschied zwischen ihnen: Inline-Semikolon gegen Semikolon am Zeilenende, Escape-Semikolon gegen normales Semikolon, Semikolon gefolgt von 'Auswählen' vs. Semikolon gefolgt von keiner 'Abfrage' ... Es muss auf deinem realen Kontext basieren. –

+0

ok, danke für die Info :) –