私はページビューイベントのリストを持っているとしましょう。それぞれのイベントIDはセッションIDです。各イベントについて、そのイベントのセッションで時間順に最初のページビューの時間とURLを追加したいと思います。SQL:単一のOVER句で複数のウィンドウ関数をサポートできますか?
uid | session_id | timestamp | url | s_timestamp | s_url
---------------------------------------------------------------------
u1 0 0 a.com/ 0 a.com/
u1 1 1 a.com/p1 1 a.com/p1
u1 1 2 a.com/p2 1 a.com/p1
ウィンドウ関数は、ここに行くための方法であるように見える:
uid | session_id | timestamp | url
----------------------------------------------------
u1 0 0 a.com/
u1 1 1 a.com/p1
u1 1 2 a.com/p2
は、私は次のように生成するSQLコマンドをしたい:例えば、私のイベントは次のようになりますテーブルtest
であると言うことができますしかし、私はそれらにかなり新しいです。次の文は、目的のテーブルを生成しますが、それは特に
SELECT
uid,
session_id,
timestamp,
url,
first_value(url) OVER (PARTITION BY uid, session_id ORDER BY timestamp ASC) s_url,
first_value(timestamp) OVER (PARTITION BY uid, session_id ORDER BY timestamp ASC) s_timestamp
FROM test
次善のだ場合、私は思ったんだけど、私が二回OVER
句を使用することを間違っているようです。 1つのOVER句を使用してセッションから時間順に最初のURLとタイムスタンプを選択する方法はありますか?私はSPARK SQLを使用していますが、私は複数の主要なSQLシステムに適用できる答えを受け入れます。
SELECT
uid,
session_id,
timestamp,
url,
first_value(url) OVER w s_url,
first_value(timestamp) OVER w s_timestamp
FROM test
WINDOW w AS (PARTITION BY uid, session_id ORDER BY timestamp ASC)
これはApacheのスパークSQLとHiveQLに動作します:
はい、WINDOWキーワードを使用してウィンドウの名前を導入し、その名前をOVERを使用して複数回参照することができます。 (私はapache spark-sqlがこれを実装しているかどうかわかりません) – joop
チップをありがとう。私はちょうどハイブSQLリファレンスで指定されたウィンドウ関数を使用してみました、そしてそれは動作します。あなたは答えを書くべきです - あなたがしたくなければ、私はそれをすることができます(しかしあなたはそれを獲得しました)。 – conradlee