어떻게 공공 데이터와이 쿼리에 대해 :
참고 쿼리가 소스 문자열 데이터를 변환, STRFTIME_UTC_USEC(UTC_USEC_TO_DAY(PARSE_UTC_USEC(created_at)), "%Y-%m-%d") day
여러 번 사용
SELECT
a.day, first_day, return_next_day,
integer((return_next_day/first_day) * 100) percent
FROM (
SELECT COUNT(DISTINCT actor, 50000) first_day,
STRFTIME_UTC_USEC(
UTC_USEC_TO_DAY(PARSE_UTC_USEC(created_at)), "%Y-%m-%d") day,
FROM
[publicdata:samples.github_timeline]
GROUP BY day) a
JOIN (
SELECT
COUNT(*) return_next_day, day
FROM (
SELECT
a.day day, a.actor, b.day, b.actor
FROM (
SELECT
STRFTIME_UTC_USEC(
UTC_USEC_TO_DAY(PARSE_UTC_USEC(created_at)), "%Y-%m-%d") day,
MAX(STRFTIME_UTC_USEC(86400000000 + UTC_USEC_TO_DAY(
PARSE_UTC_USEC(created_at)), "%Y-%m-%d")) dayplus,
actor
FROM
[publicdata:samples.github_timeline]
GROUP EACH BY actor, day) a
JOIN EACH (
SELECT
STRFTIME_UTC_USEC(
UTC_USEC_TO_DAY(PARSE_UTC_USEC(created_at)), "%Y-%m-%d") day,
actor
FROM
[publicdata:samples.github_timeline]
GROUP EACH BY actor, day) b
ON a.actor = b.actor
AND a.dayplus = b.day
)
GROUP BY day) b
ON a.day = b.day
이 나에게 원하는 결과를 제공합니다 날짜. 데이터를 소유 한 경우이 반복적 인 단계를 건너 뛰기 위해 테이블에 대해 ETL을 실행합니다.
첫 번째 테이블 수가 얼마나 많은 다른 '배우'어디에 존재하는 특정 날짜 :
는 쿼리는 두 테이블을 조인. COUNT DISTINCT의 두 번째 매개 변수에 유의하여 정확한 계산을하십시오.
두 번째 테이블 두 배우자 모두 같은 배우가 양쪽에 존재할 경우 다음 날과 함께 주어진 날을 선택합니다. 그런 다음 주어진 날과 다음 날에 출연하는 배우의 수를 계산할 수 있습니다.
두 테이블에 모두 가입하면 두 카운트가 모두 나뉘어 진행할 수 있습니다.
여러 가지 방법 중 하나 일뿐입니다. 이 쿼리를 더욱 최적화 할 수도 있습니다.