inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

1-6. 데이터 PIVOT 연습 문제

1-6 예시 문제 풀이

해결된 질문

66

김재현

작성한 질문수 4

0

질문을 남겨주실 때 아래 부분을 같이 남겨주시면 더 빠르게 상황을 파악하고 답변드릴 수 있어요 🙂

#앱 로그 데이터 PIVOT
SELECT
  event_date,
  event_timestamp,
  event_name,
  user_id,
  user_pseudo_id,
  MAX(IF(param.key = "firebase_screen", param.value.string_value, NULL)) AS firebase_screen,
  --MAX(IF(param.key = "food_id", param.value.string_value, NULL)) AS food_id,
  MAX(IF(param.key = "food_id", param.value.int_value, NULL)) AS food_id2,
  MAX(IF(param.key = "session_id", param.value.string_value, NULL)) AS session_id
FROM advanced.app_logs
CROSS JOIN UNNEST(event_params) AS param
WHERE event_date = "2022-08-01"
GROUP BY ALL
LIMIT 100
image.png

sql Google-Analytics firebase google-sheets bigquery

답변 2

0

카일스쿨

안녕하세요. food_id라는 값은 click_food 이벤트만 가지고 있는 이벤트 파라미터입니다. 그래서 다른 이벤트에서는 food_id가 NULL이 나오는 것이 맞습니다.

SELECT를 할 때 어떤 값이 나올지는 항상 같진 않습니다. 그래서 지금 쿼리를 작성하신 것도 잘 하신거라고 생각하시면 됩니다. 지금 상황에선 WHERE문에 event_name IN ('click_cart', 'click_food')를 추가해서 확인하시면 됩니다. food_id가 모두 다 채워져 있을 거예요. 이 이벤트들은 food_id란 이벤트 파라미터가 있거든요.

0

김재현

혹시 그럼 주어진 문제처럼 USER_ID가 32888이면서 CLICK_CART 이벤트가 발생한 FOOD_ID를 추출하기 위해서는 아래 쿼리를 사용해도 될까요?

 

#앱 로그 데이터 PIVOT
SELECT
  event_date,
  event_timestamp,
  event_name,
  user_id,
  user_pseudo_id,
  MAX(IF(param.key = "firebase_screen", param.value.string_value, NULL)) AS firebase_screen,
  --MAX(IF(param.key = "food_id", param.value.string_value, NULL)) AS food_id,
  MAX(IF(param.key = "food_id", param.value.int_value, NULL)) AS food_id,
  MAX(IF(param.key = "session_id", param.value.string_value, NULL)) AS session_id
FROM advanced.app_logs
CROSS JOIN UNNEST(event_params) AS param
WHERE event_name = "click_cart" AND user_id = 32888
GROUP BY ALL
LIMIT 100

1

카일스쿨

네 맞아요! WHERE 조건에 걸어주시면 되어요

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 김재현님.

강의에서 사용하신 쿼리와 결과의 차이 때문에 혼란스러워하셨던 것 같습니다. 현재 질문 주신 쿼리에서 문제를 확인해보면 데이터 추출이 예상처럼 되지 않는 이유는 여러 가지일 수 있습니다. 특히 food_id2 열이 모두 NULL로 나오는 이유를 알아보겠습니다.

  1. 데이터 필터링 조건:

    • 쿼리에서 event_date = "2022-08-01" 조건을 사용하고 있습니다. 이 조건이 실제 데이터에서는 food_id2 값이 비어 있을 날짜에 데이터를 필터링한 것인지 확인이 필요합니다. 가끔 데이터셋이 작동하거나 업데이트되면서 특정 날짜에 데이터가 차이날 수 있습니다.
  2. 잘못된 키 사용 확인:

    • MAX(IF(param.key = "food_id", param.value.int_value, NULL)) AS food_id2 부분에서 사용된 키가 정확한지 다시 확인해보세요. 키가 잘못 설정되면 원하는 데이터를 가져오지 못할 수 있습니다.
  3. 쿼리 논리 구조:

    • 쿼리에서 GROUP BY ALL은 모든 열을 그룹화하는 구문으로 사용하는 것이 아니라, 필요한 필드만 그룹화하여 필요한 집계를 만드십시오. 예를 들어, 이벤트를 하나의 트랜잭션으로 보고자 하면 event_date, event_name 등 핵심 필드만 그룹화하는 방식으로 변경할 수 있습니다.
  4. 데이터셋 확인:

    • 현재 SQL 쿼리를 실행하는 데이터셋이 강의에서 사용한 데이터셋과 동일한지 확인하세요. 가령, 데이터의 버전 차이가 있을 경우 데이터가 다르게 나타날 수 있습니다.

이해를 돕기 위해 유사한 질문과 그에 대한 해결 방법을 소개한 링크를 공유하겠습니다:

이 링크에는 PIVOT 및 쿼리 작성 시 자주 접하게 되는 문제 및 해결 방법이 잘 나와 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

최종 과제 제출

0

79

3

BigQuery 활용편 18강 질문있습니다!

0

80

1

리텐션 공부하다가 궁금한게 생겨 질문드립니다

0

79

2

안녕하세요 강사님 코호트 쿼리 공부하다가 의문점이 생겨서 문의드립니다

0

70

2

biquery 테이블 생성 오류 이슈

0

51

2

동일하게 쿼리를 작성했는데 화면과 다른 값이 나옵니다

0

72

2

[과제] 퍼널 PIVOT 테이블 작성하기

0

64

2

array 등

0

61

2

N day 리텐션 쿼리 관련 질문

0

61

2

이동평균 계산 시 order by 기본값은 뭔가요?

0

66

2

윈도우 연습문제 1번 질문

0

61

1

user_id에 NULL이 나오는데 정상인가요?

0

70

2

3-13 리텐션 과제 제출

0

92

2

최종 과제 제출

0

129

3

weekly retention 구하기 과제

0

90

2

1-9. 피벗 쿼리 작성

0

78

2

app_logs 테이블 생성 문제

0

70

2

Weekly Retention 구하기 완성하였습니다.

0

75

2

[과제] 퍼널 쿼리(피벗테이블 적용) 작성 완료

0

104

2

3-7 Weekly, Monthly Retention 쿼리 작성

0

91

2

정성 데이터 분석 방법 문의

0

163

1

최종 과제 제출

0

105

3

최종과제 제출

0

141

2

3-13. 리텐션 과제

0

201

3