[SQL] 어떻게 중포 기지 분석 원시 데이터에 세션 및 세션 기간을 계산?
SQL어떻게 중포 기지 분석 원시 데이터에 세션 및 세션 기간을 계산?
어떻게 BigQuery에 연결되어 중포 기지 분석 원시 데이터에서 세션 시간을 계산?
나는 각 레코드에 중첩 된 이벤트에 대한 패턴 화 된 명령을 사용하여 사용자를 계산하려면 다음 블로그를 사용했다,하지만 난 국가 및 시간을 기준으로 세션 및 세션 기간을 계산 진행하는 방법을 알고 싶습니다.
(나는 많은 응용 프로그램이 구성되어 있지만, 세션 시간과 세션을 계산하는 SQL 쿼리를 도와 줄 수 있다면, 그것은 엄청난 도움이 될 것입니다)
중포 기지와 큰 쿼리를 사용하는 방법에 대한 Google 블로그
해결법
-
==============================
1.나는 사용자가 20 분 이상 비활성 상태 일 때마다 세션을 깰거야 다음 쿼리에서 - 먼저 세션을 정의 할 필요가있다.
나는 사용자가 20 분 이상 비활성 상태 일 때마다 세션을 깰거야 다음 쿼리에서 - 먼저 세션을 정의 할 필요가있다.
이제, 당신이 트릭 https://blog.modeanalytics.com/finding-user-sessions-sql/에 설명 사용할 수있는 SQL 모든 세션을 찾을 수 있습니다.
다음 쿼리는 모든 세션과 길이를 찾습니다
#standardSQL SELECT app_instance_id, sess_id, MIN(min_time) sess_start, MAX(max_time) sess_end, COUNT(*) records, MAX(sess_id) OVER(PARTITION BY app_instance_id) total_sessions, (ROUND((MAX(max_time)-MIN(min_time))/(1000*1000),1)) sess_length_seconds FROM ( SELECT *, SUM(session_start) OVER(PARTITION BY app_instance_id ORDER BY min_time) sess_id FROM ( SELECT *, IF( previous IS null OR (min_time-previous)>(20*60*1000*1000), # sessions broken by this inactivity 1, 0) session_start #https://blog.modeanalytics.com/finding-user-sessions-sql/ FROM ( SELECT *, LAG(max_time, 1) OVER(PARTITION BY app_instance_id ORDER BY max_time) previous FROM ( SELECT user_dim.app_info.app_instance_id , (SELECT MIN(timestamp_micros) FROM UNNEST(event_dim)) min_time , (SELECT MAX(timestamp_micros) FROM UNNEST(event_dim)) max_time FROM `firebase-analytics-sample-data.ios_dataset.app_events_20160601` ) ) ) ) GROUP BY 1, 2 ORDER BY 1, 2
-
==============================
2.BigQuery에에서 중포 기지의 새 스키마로, 나는 @Maziar에 의한 대답은 나를 위해 작동하지 않은 것을 발견,하지만 확실 왜 안입니다. 대신에 나는 세션이 10 초 최소 경우 사용자가 30 분 동안 응용 프로그램에 참여하지 않으면 세션이 중지에 대한 귀하의 응용 프로그램과 함께 참여 사용자로 정의되는 경우,이를 계산하려면 다음을 사용했다. 그것은 총 세션 수 분에서 세션 길이를 제공하며,이 쿼리를 기반으로 : https://modeanalytics.com/modeanalytics/reports/5e7d902f82de/queries/2cf4af47dba4
BigQuery에에서 중포 기지의 새 스키마로, 나는 @Maziar에 의한 대답은 나를 위해 작동하지 않은 것을 발견,하지만 확실 왜 안입니다. 대신에 나는 세션이 10 초 최소 경우 사용자가 30 분 동안 응용 프로그램에 참여하지 않으면 세션이 중지에 대한 귀하의 응용 프로그램과 함께 참여 사용자로 정의되는 경우,이를 계산하려면 다음을 사용했다. 그것은 총 세션 수 분에서 세션 길이를 제공하며,이 쿼리를 기반으로 : https://modeanalytics.com/modeanalytics/reports/5e7d902f82de/queries/2cf4af47dba4
세션 AS SELECT COUNT (*), AVG (길이)의 AS average_session_length FROM ( SELECT는 global_session_id (MAX (event_timestamp) - MIN (event_timestamp)) / (60 * 1000 * 1000)의 길이 AS FROM ( SELECT는 user_pseudo_id event_timestamp, AS SUM (is_new_session) OVER (user_pseudo_id, event_timestamp BY ORDER) global_session_id, SUM (is_new_session) OVER (event_timestamp BY user_pseudo_id ORDER BY PARTITION) user_session_id AS FROM ( 고르다 *, CASE WHEN event_timestamp - last_event> = (30 * 60 * 1000 * 1000) OR last_event는 NULL은 IS is_new_session AS THEN 1 ELSE 0 END FROM ( SELECT는 user_pseudo_id event_timestamp, last_event AS LAG (event_timestamp 1) OVER (event_timestamp BY user_pseudo_id ORDER BY PARTITION) `dataset.events_2019 *`FROM ) 마지막 ) 최종 ) 세션 GROUP BY 1 ) AGG WHERE 길이> = (60분의 10)
-
==============================
3.아시다시피, 구글 BigQuery에서의 중포 기지 데이터베이스의 스키마를 변경 : https://support.google.com/analytics/answer/7029846
아시다시피, 구글 BigQuery에서의 중포 기지 데이터베이스의 스키마를 변경 : https://support.google.com/analytics/answer/7029846
@Felipe 대답 덕분에, 새로운 포맷은 다음과 같이 변경됩니다 :
SELECT SUM(total_sessions) AS Total_Sessions, AVG(sess_length_seconds) AS Average_Session_Duration FROM ( SELECT user_pseudo_id, sess_id, MIN(min_time) sess_start, MAX(max_time) sess_end, COUNT(*) records, MAX(sess_id) OVER(PARTITION BY user_pseudo_id) total_sessions, (ROUND((MAX(max_time)-MIN(min_time))/(1000*1000),1)) sess_length_seconds FROM ( SELECT *, SUM(session_start) OVER(PARTITION BY user_pseudo_id ORDER BY min_time) sess_id FROM ( SELECT *, IF(previous IS null OR (min_time-previous) > (20*60*1000*1000), 1, 0) session_start FROM ( SELECT *, LAG(max_time, 1) OVER(PARTITION BY user_pseudo_id ORDER BY max_time) previous FROM (SELECT user_pseudo_id, MIN(event_timestamp) AS min_time, MAX(event_timestamp) AS max_time FROM `dataset_name.table_name` GROUP BY user_pseudo_id) ) ) ) GROUP BY 1, 2 ORDER BY 1, 2 )
참고 : 프로젝트 정보에 따라 변경 dataset_name 및 TABLE_NAME
샘플 결과 :
from https://stackoverflow.com/questions/42546815/how-to-calculate-session-and-session-duration-in-firebase-analytics-raw-data by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 매개 변수를 사용하여 ASP.NET ODBC 쿼리 (0) | 2020.05.27 |
---|---|
[SQL] SQL에서 지능 목록에 문자열 목록을 변환 (0) | 2020.05.27 |
[SQL] SQL 여러 조건 조항에 LINQ (0) | 2020.05.27 |
[SQL] 스파크에서 쿼리의 실행 시간을 측정하는 방법 (0) | 2020.05.27 |
[SQL] HQL : 그것은 내부 하위 쿼리에 가입 수행 할 수 있습니까? (0) | 2020.05.27 |