2016-11-24 21 views
3

Wie kann ich lange, mehrzeilige Hive-Abfragen in Spark SQL ausführen? Wie Abfrage unter:Wie führe ich multiline sql in spark sql aus?

val sqlContext = new HiveContext (sc) 
val result = sqlContext.sql (" 
select ... 
from ... 
"); 
+2

bitte verbessern Sie Ihre Post, niemand will Screenshots von Code sehen – mtoto

Antwort

8

Use ""“statt, so zum Beispiel

val results = sqlContext.sql (""" 
    select .... 
    from .... 
"""); 

oder, wenn Sie Code formatieren möchten, verwenden Sie:

val results = sqlContext.sql (""" 
    |select .... 
    |from .... 
""".stripMargin); 
0

Es ist erwähnenswert, dass die Länge ist nicht das Problem, nur das Schreiben, dazu kann man "" wie von Gaweda vorgeschlagen verwenden oder einfach eine String-Variable verwenden, z indem Sie es mit einem String Builder erstellen. Zum Beispiel:

val selectElements = Seq("a","b","c") 
val builder = StringBuilder.newBuilder 
builder.append("select ") 
builder.append(selectElements.mkString(",")) 
builder.append(" where d<10") 
val results = sqlContext.sql(builder.toString()) 
+0

Ohne val in Linien mit append :) –

+0

sorry, zu viel cut & paste ... :). Die Antwort wurde aktualisiert ... –

1

Sie können am Ende jeder Zeile Triple-Anführungszeichen am Anfang/Ende des SQL-Code oder einen umgekehrten Schrägstrichs verwenden.

val results = sqlContext.sql (""" 
    create table enta.scd_fullfilled_entitlement as 
    select * 
    from my_table 
    """); 

results = sqlContext.sql (" \ 
    create table enta.scd_fullfilled_entitlement as \ 
    select * \ 
    from my_table \ 
    ") 
+0

Triple-Anführungszeichen (sowohl Double als auch Single) können auch in Python verwendet werden. Auch Backslashes sind veraltet. –

+0

Danke, bearbeitet. Obsolet? Nicht genau, laut dem Stypen Guide https://www.python.org/dev/peps/pep-0008/ – Ricardo

Verwandte Themen