2016-11-24 31 views
3

如何在Spark SQL中執行冗長的多行Hive查詢?下面像查詢:如何在spark中執行多行sql sql

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

請提高你的帖子,沒有人願意看到的代碼 – mtoto

回答

8

使用 「」」代替,因此,例如

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

,或者,如果你想格式化代碼,使用:

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

值得注意的是長度不是問題,只是寫作。爲此,您可以使用Gaweda建議的「」「或簡單地使用字符串變量,例如通過使用字符串生成器來構建它。例如:

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

截圖沒有的Val線,追加:) –

+0

遺憾,太多的剪切和粘貼... :)。更新了答案... –

1

您可以在SQL代碼或在每一行的最後一個反斜槓的開始/結束使用三引號。

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

三重引號(包括雙精度和單精度)也可以在Python中使用。反斜槓也是過時的。 – 2016-11-24 16:15:19

+0

謝謝,編輯。過時了嗎?並非如此,根據Stype指南https://www.python.org/dev/peps/pep-0008/ – Ricardo