2017-01-13 14 views
2

を述語含まIは、Spark SQL 2.0SparkSQL - 相関スカラサブクエリが唯一の平等が

SELECT 
a.id as id, 
(SELECT SUM(b.points) 
    FROM tableB b 
    WHERE b.id = a.id AND b.date <= a.date) AS points 
FROM tableA a 

で次のクエリを実行したいことができますが、私は次のエラー

The correlated scalar subquery can only contain equality predicatesを取得します。

2つのデータフレームtableAとtableBの間でクエリを書き換えたり、操作を使用したりするにはどうすればよいですか?

+1

はb.dateが後a.dateよりも、どのようにパターンがありますか?それはいつも日、月、年以上ですか?もしそうなら、そのパターンを比較に追加することができます。例:a.date +1日= b.date – gregory

+0

良いコメント!残念ながら、b.dateはa.dateよりも前の日付/時刻であってもかまいません。 – nicola

+1

次の質問:あなたは本当にb.date <= a.dateが必要ですか? a.id = b.idで十分ではないのですか?実際には2つ以上の一致IDが存在しますか?はいの場合は、aとbの間に別の固有の比較ができますか? – gregory

答えて

1
select a.id as id, 
sum(b.points) as points 
from a, b 
where a.id = b.id 
and b.date <= a.date 
group by a.id 
; 

IDとBの点列の和との間の1対1の関係を保証するために、サブセレクトとgroup by IDをスキップします。 bはa.dateと次々前に、ID = 5、2の3つのエントリを持っていることを

select * from a ; 

id|date 
1|2017-01-22 17:59:49 
2|2017-01-22 18:00:00 
3|2017-01-22 18:00:05 
4|2017-01-22 18:00:11 
5|2017-01-22 18:00:15 

select * from b ; 
id|points|date 
1|12|2017-01-21 18:03:20 
3|25|2017-01-21 18:03:37 
5|17|2017-01-21 18:03:55 
2|-1|2017-01-22 18:04:27 
4|-4|2017-01-22 18:04:35 
5|400|2017-01-20 18:17:31 
5|-1000|2017-01-23 18:18:36 

お知らせ:

は、ここで私が使用「ダウンと汚い」の例です。

select a.id, sum(b.points) as points from a, b where a.id = b.id and b.date <= a.date group by a.id ; 
1|12 
3|25 
5|417 

私はまた、サポートされている「ことで、グループを」確認:http://spark.apache.org/docs/latest/sql-programming-guide.html#supported-hive-features