2016-11-24 36 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