2017-10-18 11 views
0

を設定します。私は、列の様々な組み合わせを渡す必要があるパラメータSPARKのSQLのグループ化が

などとして、私のSQLクエリに設定します。

Val result=sqlContext.sql(""" select col1,col2,col3,col4,col5,count(col6) from table T1 GROUP BY col1,col2,col3,col4,col5 GROUPING SETS ((col1,col2),(col3,col4),(col4, col5)) """) 

私は集計値を見つけるために必要があるため、いくつかの組み合わせがあります。 手動でハードコードするのではなく、これらの列のセットをパラメータとしてSQLクエリに渡す方法はありますか。

現在、私はsqlクエリですべての組み合わせを提供していますが、新しい組み合わせが再び来たらクエリを変更する必要があります。私はファイル内ですべての組み合わせを持つことを計画しているし、すべてを読んで、SQLクエリにパラメータとして渡します。出来ますか?

例:表

id category age gender cust_id 

1 101 54 M 1111 
1 101 54 M 2222 
1 101 55 M 3333 
1 102 55  F 4444 

""" select id, category, age, gender, count(cust_id) from table T1 group By id, category, age, gender 
GROUPING SETS ((id,category),(id,age),(id,gender)) """ 

はそれが結果の下に生成しなければならない:

group by (id, category) - count of cust_id 
1 101 3 
1 102 1 
group by (id and age) - count of cust_id 
1 54 2 
1 55 2 
group by (id and gender) - count cust_id 
1 M 3 
1 F 1 

これはほんの一例である - 私はセット(全ての組み合わせ)を模索する種々の異なる組み合わせを渡す必要があるのと同様に1つのパラメータまたは別々に行く

本当にありがとうございます。

ありがとうございます。列の

+0

をSQLを構築することができますが、小さなサンプルデータと予想される出力を共有することができますか? – mtoto

+0

こんにちは、私は例を追加しました。任意のヘルプは本当に感謝される –

答えて

0

組み合わせが

sqlがスパークないソースデータベースで実行されるパラメータとして、私のSQLクエリに設定します。 MySQLにはまったく届きません。

私はあなたがすべての可能な組み合わせをしたい場合は、GROUPING SETSを必要としないすべての組み合わせ

を提供してきました。ただ、CUBEを使用します。

SELECT ... FROM table CUBE (col1,col2,col3,col4,col5) 
+0

私のSQLの意味 - 私のスパークSQLクエリと私は列のすべての列ではなく、様々なセットの集計を行う必要があります。以前私はすべての組み合わせを得るためにCUBEを試しましたが、非常に時間がかかり、コードが失敗し、私の場合には必要でないすべての組み合わせが生成されます。 –

1

あなたが動的に

// original slices 
var slices = List("(col1, col2)", "(col3, col4)", "(col4, col5)") 
// adding new slice 
slices = "(col1, col5)" :: slices 
// building SQL dynamically 
val q = 
s""" 
with t1 as 
(select 1 col1, 2 col2, 3 col3, 
     4 col4, 5 col5, 6 col6) 
select col1,col2,col3,col4,col5,count(col6) 
    from t1 
group by col1,col2,col3,col4,col5 
grouping sets ${slices.mkString("(", ",", ")")} 
""" 
// output 
spark.sql(q).show 

結果

scala> spark.sql(q).show 
+----+----+----+----+----+-----------+ 
|col1|col2|col3|col4|col5|count(col6)| 
+----+----+----+----+----+-----------+ 
| 1|null|null|null| 5|   1| 
| 1| 2|null|null|null|   1| 
|null|null| 3| 4|null|   1| 
|null|null|null| 4| 5|   1| 
+----+----+----+----+----+-----------+ 
関連する問題