0
クリックストリームデータのセッションIDを作成しています。ユーザが自分のアクティビティ(リンクチェーンを持つレコード間の時間差)の間に30分以上アクティブでない場合、新しいセッションIDが作成され、割り当てられます。このRedshift Postgresqlクエリは、UPDATE文を使用して最適化できますか?
現時点では、この新しいセッションIDをメインテーブルで利用できるデータから別の列として割り当てて、まったく新しいテーブルを作成することができました。
これは計算上高価なクエリであり、新しいテーブル全体を作成するため(メインテーブルが同時に存在する場合)、記憶領域を占有します。この新しいテーブルが作成されたら、私はメインテーブルを削除しなければならなかった。
セッションIDを割り当てることができ、新しいテーブルを作成せずにプロセス全体を終了できますか? 最適化されたクエリはRedshift Postgresqlで動作する必要があります。
CREATE TABLE <new_table_name> AS
SELECT * , userid || '_' || SUM(session) OVER (PARTITION BY userid ORDER BY date rows unbounded preceding) AS session_id
FROM (
SELECT *
, CASE
WHEN EXTRACT(EPOCH FROM date) - LAG(EXTRACT(EPOCH FROM date)) OVER (PARTITION BY userid ORDER BY date) >= 30 * 60
THEN 1
WHEN row_number() over (partition by userid order by date) = 1
THEN 1
ELSE 0
END as session
FROM
<table_name>
);