페이지 체류 시간 을 계산 하 는 다른 방식
4780 단어 presto
메모: 여기 사용 되 는 계산 엔진 은 presto 입 니 다.
먼저 사용자 조회 기록 데이터 표를 만 듭 니 다. 표 구 조 는 간단 합 니 다. 3 개의 필드 만 있 습 니 다. uid 사용자 id, page 페이지 링크, time 이 페이지 에 들 어 가 는 시간 스탬프 입 니 다.페이지 가 떠 나 는 시간 이 있다 면 떠 나 는 시간 - 들 어 가 는 시간 은 페이지 가 머 무 는 시간 입 니 다.잘 생각 했 습 니 다. 아 쉽게 도 보통 상황 에서 페이지 타 점 은 페이지 에 들 어 가 는 시간 만 기록 하고 페이지 가 떠 나 는 시간 을 기록 하지 않 습 니 다.페이지 체류 시간 을 계산 하려 면 사용자 가 다음 페이지 nextpage 에 들 어 가 는 시간 을 통 해 현재 페이지 curpage 의 시간 을 빼 는 방식 으로 계산 해 야 합 니 다. 이것 도 페이지 체류 시간 을 계산 하 는 난점 입 니 다.오늘 우 리 는 sql 로 이 기능 을 실현 할 것 이다.
CREATE TABLE hadoop.wh.site_flow_test (
uid varchar,
page varchar,
time long )
WITH ( format = 'ORC' )
테스트 데이터
userid1,index,1539242423
userid1,index,1539243421
userid1,page,1539243421
userid1,detail,1539213421
userid1,detail,1539223421
userid1,page,1539243121
userid1,detail,1539253421
userid2,index,1539241423
userid2,index,1539243221
userid2,page,1539243411
userid2,detail,1539242421
userid2,detail,1539240421
userid2,page,1539243221
userid2,detail,1539213421
첫 번 째 단 계 는 모든 탐색 페이지 데이터 집합 형식 에 대해 다음 과 같 습 니 다. uid, [page 1, page 2], [time 1, time 2];이 데 이 터 는 사용자 가 페이지 1 페이지 에 들 어 가 는 시간 이 time 1 이라는 뜻 입 니 다. 그 중에서 time 1 과 time 2 는 오름차 순 으로 배열 되 어 있 으 며 구체 적 으로 다음 과 같 습 니 다.
create table hadoop.wh.site_flow_tmp (uid,pages,arrs)
as
with a as (select uid,page,time from hadoop.wh.site_flow_test order by time )
select uid,array_agg(page),array_agg(time) from a group by uid
uid▼pages▼arrs▼
userid2 PrestoArray{ array=[detail, detail, index, detail, index, page, page]} PrestoArray{ array=[1.539213421E9, 1.539240421E9, 1.539241423E9, 1.539242421E9, 1.539243221E9, 1.539243221E9, 1.539243411E9]}
userid1 PrestoArray{ array=[detail, detail, index, page, index, page, detail]} PrestoArray{ array=[1.539213421E9, 1.539223421E9, 1.539242423E9, 1.539243121E9, 1.539243421E9, 1.539243421E9, 1.539253421E9]}
시작 시간 배열 과 끝 시간 배열 을 구축 합 니 다. starts 필드 는 대응 하 는 pages 아래 표 시 된 페이지 에 들 어 가 는 시간 을 말 합 니 다. ends 는 pages 아래 표 에 대응 하 는 떠 나 는 시간 입 니 다.userid 2 사용 자 는 7 개의 페이지 를 훑 어 보 았 습 니 다. 마지막 페이지 의 떠 나 는 시간 은 연결 되 지 않 기 때문에 마지막 페이지 의 떠 나 는 시간 은 바로 들 어 가 는 시간 입 니 다. 페이지 가 머 무 르 는 시간 을 계산 하면 0 이 됩 니 다.
create table hadoop.wh.site_flow_tmp2 (uid,pages,starts,ends) as
select uid,pages,slice(arrs,1,cardinality(arrs)) starts ,concat(slice(arrs,2,cardinality(arrs)),slice(arrs,cardinality(arrs),1)) ends
from hadoop.wh.site_flow_tmp
uid▼pages▼starts▼ends▼
userid2
PrestoArray{ array=[detail, detail, index, detail, index, page, page]}
PrestoArray{ array=[1.539213421E9, 1.539240421E9, 1.539241423E9, 1.539242421E9, 1.539243221E9, 1.539243221E9, 1.539243411E9]}
PrestoArray{ array=[1.539240421E9, 1.539241423E9, 1.539242421E9, 1.539243221E9, 1.539243221E9, 1.539243411E9, 1.539243411E9]}
userid1
PrestoArray{ array=[detail, detail, index, page, index, page, detail]}
PrestoArray{ array=[1.539213421E9, 1.539223421E9, 1.539242423E9, 1.539243121E9, 1.539243421E9, 1.539243421E9, 1.539253421E9]} PrestoArray{ array=[1.539223421E9, 1.539242423E9, 1.539243121E9, 1.539243421E9, 1.539243421E9, 1.539253421E9, 1.539253421E9]}
떠 나 는 시간 에서 입장 시간 을 빼 면 페이지 체류 시간 을 얻 을 수 있다.
create table hadoop.wh.site_flow_tmp3(uid,pages,starts,result) as
SELECT uid,pages,starts,zip_with(starts, ends, (x, y) -> y- x) from hadoop.wh.site_flow_tmp2
uid▼pages▼starts▼result▼
userid2
PrestoArray{ array=[detail, detail, index, detail, index, page, page]}
PrestoArray{ array=[1.539213421E9, 1.539240421E9, 1.539241423E9, 1.539242421E9, 1.539243221E9, 1.539243221E9, 1.539243411E9]}
PrestoArray{ array=[27000.0, 1002.0, 998.0, 800.0, 0.0, 190.0, 0.0]}
userid1
PrestoArray{ array=[detail, detail, index, page, index, page, detail]}
PrestoArray{ array=[1.539213421E9, 1.539223421E9, 1.539242423E9, 1.539243121E9, 1.539243421E9, 1.539243421E9, 1.539253421E9]}
PrestoArray{ array=[10000.0, 19002.0, 698.0, 300.0, 0.0, 10000.0, 0.0]}
데이터
with a as (SELECT uid,pages,starts,result from hadoop.wh.site_flow_tmp3 )
select uid,page,starttime,pagetime from a CROSS JOIN UNNEST(pages,starts,result) t (page,starttime,pagetime)
uid▼page▼starttime▼pagetime▼
userid2 detail 1539213421 27000
userid2 detail 1539240421 1002
userid2 index 1539241423 998
userid2 detail 1539242421 800
userid2 index 1539243221 0
userid2 page 1539243221 190
userid2 page 1539243411 0
userid1 detail 1539213421 10000
userid1 detail 1539223421 19002
userid1 index 1539242423 698
userid1 page 1539243121 300
userid1 index 1539243421 0
userid1 page 1539243421 10000
userid1 detail 1539253421 0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Presto JDBC와 함께 IntelliJ/DataGrip 사용완전히 직관적이지 않은 것은 아니지만 설정하려는 많은 사람들이 옵션을 보지 못하고 포기할 수 있습니다. 따라서 "JDBC 드라이버"아래의 링크를 클릭하고 다운로드하십시오. "데이터베이스"패널에서 +를 클릭하거나 마우...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.