web-dev-qa-db-fra.com

Comment exécuter multi line sql dans spark sql

Comment puis-je exécuter de longues requêtes Hive multilignes dans Spark SQL? Comme requête ci-dessous:

val sqlContext = new HiveContext (sc)
val result = sqlContext.sql ("
 select ...
 from ...
");
6
user2910372

Utilisez "" "à la place, donc par exemple

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

ou, si vous voulez formater le code, utilisez:

val results = sqlContext.sql ("""
     |select ....
     |from ....
""".stripMargin);
11
T. Gawęda

Vous pouvez utiliser des guillemets au début/à la fin du code SQL ou une barre oblique inverse à la fin de chaque ligne.

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 \
    ")
2
Ricardo

Il convient de noter que la longueur n’est pas le problème, mais seulement l’écriture. Pour cela, vous pouvez utiliser "" "comme suggéré par Gaweda ou simplement utiliser une variable de chaîne, par exemple en la construisant avec le constructeur de chaînes. Par exemple:

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
Assaf Mendelson

Outre les méthodes ci-dessus, vous pouvez également utiliser la méthode ci-dessous:

val results = sqlContext.sql("select .... " +
" from .... " +
" where .... " +
" group by ....
");
0
vikash gupta
val query = """(SELECT
      a.AcctBranchName,
    c.CustomerNum,
    c.SourceCustomerId,
    a.SourceAccountId,
    a.AccountNum,
    c.FullName,
    c.LastName,
    c.BirthDate,
    a.Balance,
    case when [RollOverStatus] = 'Y' then 'Yes' Else 'No' end as RollOverStatus
    FROM
    v_Account AS a left join v_Customer AS c
      ON c.CustomerID = a.CustomerID AND c.Businessdate = a.Businessdate
    WHERE
    a.Category = 'Deposit' AND
    c.Businessdate= '2018-11-28'  AND
    isnull(a.Classification,'N/A') IN ('Contractual Account','Non-Term Deposit','Term Deposit')
    AND IsActive = 'Yes' ) tmp """
0
kn3l