Изменение столбцов для динамического запроса в таблице в Spark Project - PullRequest
0 голосов
/ 06 февраля 2019

Я выполняю запрос SQL ниже в Spark 2.3, как показано ниже:

val dataJoin = s"""SELECT
                date,
                a.mth,
        weekday,
        if(a.x_days=b.x_days,b.y,c.z) as total,
        case when (a.x - day(date)) +1 <=0 then 1
                         when (a.x - day(date)) +1 > 366 then 999
                         else (a.x - day(date)) +1  end  as glt,
        GROSS
        FROM tableA a 
        left join tableB b
        on a.mth = b.mth and a.x_days=b.x_days"""

val data =sparkVal.sql(dataJoin)

Я хочу сделать запрос динамическим, т. Е. Если я хочу выбрать больше столбцов или меньше столбцов, модуль не долженбыть затронутым, просто изменение в одном месте должно помочь.

Как это сделать?Есть ли способ настроить так, XML или что-то?

1 Ответ

0 голосов
/ 06 февраля 2019

Похоже, что вы хотите изменить столбцы в предложении select запроса.

Вы можете выполнить интерполяцию строк с помощью $ {} в синтаксисе s""".Динамические столбцы могут храниться в списке отдельно, а затем объединяться с помощью mkString (",").Вы могли бы сделать что-то вроде ниже

val sel_list = List("date","a.mth","weekday").mkString(",")

val dataJoin = s"""SELECT
           ${sel_list} ,
    if(a.x_days=b.x_days,b.y,c.z) as total,
    case when (a.x - day(date)) +1 <=0 then 1
                     when (a.x - day(date)) +1 > 366 then 999
                     else (a.x - day(date)) +1  end  as glt,
    GROSS
    FROM tableA a
    left join tableB b
    on a.mth = b.mth and a.x_days=b.x_days"""
   println(dataJoin)

результаты

SELECT
           date,a.mth,weekday , 
    if(a.x_days=b.x_days,b.y,c.z) as total,
    case when (a.x - day(date)) +1 <=0 then 1
                     when (a.x - day(date)) +1 > 366 then 999
                     else (a.x - day(date)) +1  end  as glt,
    GROSS
    FROM tableA a
    left join tableB b
    on a.mth = b.mth and a.x_days=b.x_days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...