묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
1-11. 현황 파악하기
https://www.notion.so/FOODIE-APP-0186b8e16c164701afc3d7afd66a551f?pvs=4현황 파악해봤습니다! 피드백 부탁드립니다~
-
해결됨초보자를 위한 BigQuery(SQL) 입문
4-5 시간 데이터 연습 문제 2번
별 것 아닌 내용일 수도 있지만 의문이 생겨 질문 남깁니다. 2번에서 오전 6시와 오후 6시 사이의 배틀 수를 계산하라고 했는데, 그럴 때 EXTRACT에서 < 18 이 되어야 하지 않는지 질문드립니다. 예를 들어, EXTRACT <= 18을 사용하면 18시 40분에 일어난 배틀도 카운트가 돼서 오류가 생길 수도 있다고 생각이 들었습니다.
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
3-13. 리텐션 분석 과제
"3-13. 리텐션 과제 : 꼭 풀어보시고 제출해주세요" 강의 과제 완료하여 제출 합니다. 링크 : 리텐션 분석 과제 "쿼리 검토 요청"이라고 기재되어 있는 부분 쿼리에 이상이 없는지 확인해주시면 감사하겠습니다!그리고 과제하다가 궁금한 점이 있어 "문의사항"도 남겨두었습니다. 해당 부분도 답변 부탁드립니다! 전반적으로 리텐션 분석을 진행하는 과정이 올바른지에 대해서도 피드백을 주시면 많은 도움이 될 것 같습니다! 강의를 통해 정말 많이 배울 수 있었습니다!감사합니다.
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
1-9. 퍼널 SQL 쿼리 작성하기
강의 보면서 '퍼널별 유저 수 집계' 쿼리 작성했는데 결과값이 올바르게 나오지 않아요... 어디서 잘못 되었을까요?WITH base AS( SELECT event_date, event_name, DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul') as event_timestamp, event_param, user_id, user_pseudo_id, platform, -- event_parma.key PIVOT MAX(IF(event_param.key='firebase_screen',event_param.value.string_value,null)) AS firebase_screen, -- MAX(IF(event_param.key='food_id',event_param.value.int_value,null)) AS food_id, MAX(IF(event_param.key='session_id',event_param.value.string_value,null)) AS session_id FROM advanced.app_logs CROSS JOIN UNNEST(event_params) as event_param GROUP BY ALL) -- event_name + screen (필요한 이벤트만 where 조건에 걸어서 사용) ,filter_event as( SELECT * except(event_name,firebase_screen), concat(event_name,'-',firebase_screen) AS event_name_with_screen FROM base WHERE event_name in ('screen_view','click_payment')) SELECT event_name_with_screen, -- step_number case when event_name_with_screen='screen_view-welcome' then 1 when event_name_with_screen='screen_view-home' then 2 when event_name_with_screen='screen_view-food_category' then 3 when event_name_with_screen='screen_view-restaurant' then 4 when event_name_with_screen='screen_view-cart' then 5 when event_name_with_screen='click_pavement-cart' then 6 else null end AS Step_number, count(DISTINCT user_pseudo_id) as cnt FROM filter_event GROUP BY ALL HAVING step_number IS NOT NULL
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[과제] 퍼널 쿼리(피벗테이블 적용) 작성
# base 쿼리 작성 전 생각 흐름 ---------------------------------------------------- ## 1. 테이블 내 데이터 구조 파악 -- select -- * -- from advanced.app_logs -- where -- event_date = '2022-08-01' -- 목적에 맞는 쿼리를 기존 데이터로 구현할 수 있는지 여부 확인 -- 연습문제 결과물 컬럼인 'event_name_with_screen', 'step_number', 'cnt'는 기존 컬럼에 없음. -- 기존 컬럼에 없기 때문에 해당 컬럼을 어떻게 구현해내야 할 지 생각해보기 ## 2. event_name_with_screen 컬럼 구현 순서 및 방법 -- event_name_with_screen는 다음과 같은 value를 가짐 -- 1. screen_view-welcome -- 2. screen_view-home -- 3. screen_view-food_vategory -- 4. screen_view-restaurant -- 5. screen_view-cart -- 6. click_payment-cart -- 위 6가지 value가 기존 컬럼에 있는지 확인해보기 -- 있는 경우 -- 기존 컬럼 활용 -- 없는 경우 -- concat 등으로 새롭게 구현 -- 연습문제에서는 event_name과 event_params.key에 있는 value를 concat 했음. -- event_params.key는 데이터타입이 struct이기 때문에 unnest 필요. -- select -- event_name, -- unnest_event_params -- from advanced.app_logs -- cross join unnest(event_params) as unnest_event_params -- where -- event_date = '2022-08-01' -- unnest 결과물에 피봇테이블 적용하기 -- 피봇테이블로 만들면 직관적으로 event_name과 concat 하기가 용이해서. -- select -- event_name, -- event_date, -- event_timestamp, -- user_pseudo_id, -- max(if(unnest_event_params.key = 'firebase_screen', unnest_event_params.value.string_value, null)) as firebase_screen, -- max(if(unnest_event_params.key = 'food_id', unnest_event_params.value.int_value, null)) as food_id, -- max(if(unnest_event_params.key = 'session_id', unnest_event_params.value.string_value, null)) as session_id -- from advanced.app_logs -- cross join unnest(event_params) as unnest_event_params -- where event_date between '2022-08-01' and '2022-08-18' -- group by 1, 2, 3, 4 ---------------------------------------------------- with base as ( select event_name, event_date, event_timestamp, user_pseudo_id, max(if(unnest_event_params.key = 'firebase_screen', unnest_event_params.value.string_value, null)) as firebase_screen, max(if(unnest_event_params.key = 'food_id', unnest_event_params.value.int_value, null)) as food_id, max(if(unnest_event_params.key = 'session_id', unnest_event_params.value.string_value, null)) as session_id from advanced.app_logs cross join unnest(event_params) as unnest_event_params where event_date between '2022-08-01' and '2022-08-18' group by 1, 2, 3, 4 ), base2 as ( select *, concat(event_name, '-', firebase_screen) as event_name_with_screen from base ) ## 일자별 퍼널 쿼리 , base3 as (select event_date, event_name_with_screen, # 2개 이상 조건을 한 개 컬럼에 적용해야 하기 때문에 case when 사용 case when event_name_with_screen = 'screen_view-welcome' then 1 when event_name_with_screen = 'screen_view-home' then 2 when event_name_with_screen = 'screen_view-food_category' then 3 when event_name_with_screen = 'screen_view-restaurant' then 4 when event_name_with_screen = 'screen_view-cart' then 5 when event_name_with_screen = 'click_payment-cart' then 6 else null end as step_number, # 중복되지 않은 사용자수(비로그인 이용자까지)를 파악하기 위해서 count(distinct 컬럼명) 사용 count(distinct user_pseudo_id) as cnt from base2 group by all # null 값 제외하기 위해서 그룹에 필터링 거는 having 사용 having step_number is not null # 1일부터 보고 싶기 때문에 오름차순(asc) 적용 order by 1 asc) ## 일자별 쿼리 (피벗테이블 적용) select event_date, max(if(event_name_with_screen = 'screen_view-welcome', cnt, 0)) as screen_view_welcome, max(if(event_name_with_screen = 'screen_view-home', cnt, 0)) as screen_view_home, max(if(event_name_with_screen = 'screen_view-food_category', cnt, 0)) as screen_view_food_category, max(if(event_name_with_screen = 'screen_view-restaurant', cnt, 0)) as screen_view_restaurant, from base3 group by all order by 1 asc
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
1-6. 데이터 PIVOT 연습문제
빅쿼리 날짜 타입 입력할때 큰따옴표, 작은 따옴표 둘 중에 아무거나 입력해도 상관없을까요?
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
1-4 ARRY ,STRUCT 연습문제
어느 부분에서 오류 났는지 모르겠어요!
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
1-2. 데이터 불러오기 질문
app_logs_temp 테이블 생성할 때 바로 event_date로 파티션 설정할 수 없을까요? app_logs 테이블 생성할 때 쿼리 이해가 잘 되지 않아요, 설정에서 테이블 만들기와의 차이점이 무엇인가요?
-
해결됨초보자를 위한 BigQuery(SQL) 입문
4-5 시간데이터 연습문제 1~2번 질문
마지막 부분에 시간별 데이터 추출할때서브쿼리 사용하지 않고 다이렉트로 추출할 수 없나요?group by에 extract( hour from battle_datetime)은 인식을 못하는 건가요?
-
미해결이커머스 데이터로 시작하는 SQL 데이터 분석
대시보드 페이지 세팅 방법
섹션11에서 1강과 2강 사이에 강의가 혹시 생략된게 있나요?2강 들어보면 저번 시간에 테마까지 변경해봤다고 말씀하시는데 1강 보면 그 부분 강의가 없어서요.구글 클라우드 사이트에서 대시보드 작성하는 부분을 어떻게 들어가는지, 어떻게 2강 화면처럼 세팅해놓는지 갑자기 뛰어넘어진 것 같아 여쭤봅니다.
-
해결됨이커머스 데이터로 시작하는 SQL 데이터 분석
빅쿼리 예약어 출력 형식
안녕하세요 수업 잘 듣고 있습니다. 혹시 빅쿼리 프로그램에서 예약어는 자동으로 대문자로 출력되게끔 하는 설정이 따로 있나요?
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
3-8. Google Sheets로 Retention Curve 시각화하기 질문
안녕하세요 강사님ctrl + A를 해도 전체 화면이 선택이 안되는 것 같습니다.삽입 목록도 클릭이 안되게 막혀있습니다!해결 방법이 궁금합니다 :)
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
최종 과제 제출
안녕하세요. 최종 과제 노션으로 작성해서 링크 공유드립니다.감사합니다!https://staticstic.notion.site/9c91ee729d734edeb5a85cc8fa6bf2b6?pvs=4
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
퍼널 분석
강사님 안녕하세요,섹션4 리텐션 분석 들어가기 전에 app_logs 데이터 가지고 퍼널분석을 진행해 보았습니다!https://www.notion.so/de12e9d1d9fd4e9595cee4ddd5f5c6cf?pvs=4
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
결제계정 등록했는데도 불구하고 app_logs 테이블에 데이터가 존재하지 않습니다
무료 체험판이 만료되어서 결제 계정을 활성화시켰습니다.그런데 app_logs 테이블에 데이터가 존재하지 않습니다.어떻게 해결해야 할까요 궁금합니다...!
-
해결됨초보자를 위한 BigQuery(SQL) 입문
2-6 연습문제 15번 질문있습니다!
15.트레이너가 보유한 포켓몬(trainer_pokemon)이 제일 많은 트레이너는 누구일까요? 문제에서 SELECT trainer_id, COUNT(id) AS cnt FROM basic.trainer_pokemon WHERE status != "Released" GROUP BY trainer_id ORDER BY cnt DESC; 이렇게 풀어봤는데 풀어준 포켓몬이 제외되어서 카일님과 다른 답이 도출되더라구요. 풀어준 것은 보유중이 아닐거라 생각해서 쿼리를 작성했었는데 이렇게 풀이한 것도 괜찮은 풀이방법인지 질문드립니다!
-
해결됨초보자를 위한 BigQuery(SQL) 입문
총 정리 5번 문제 질문
안녕하세요 카일님, 카일님이 푼 결과와 제가 푼 결과가 달라서 질문드립니다.저는 5번 문제에서 트레이너가 '잡았던'이라고 해서 다음과 같은 쿼리를 작성했습니다. WHERE tp.status IN ('Active', 'Training')그런데 카일님 해설 영상을 보니깐 WHERE을 따로 작성 안 하셨더라고요!혹시 제가 문제를 잘못 해석한걸까요??제가 작성한 쿼리 및 결과는 이미지에 첨부해 뒀습니다
-
해결됨초보자를 위한 BigQuery(SQL) 입문
섹션 8 문제 풀이 1번 질문 있습니다!
안녕하세요 카일님, 질문이 있습니다!trainer_pokemon 테이블에서 '트레이너가 보유한 포켓몬의 수'를 구하실 때'포켓몬 수'를 COUNT(pokemon_id)가 아닌, COUNT(id)를 사용한 이유를 구체적으로 알 수 있을까요..?아직 각 테이블 내에 있는 id에 대한 개념이 잘 안 잡혀서 질문 드립니다 ㅠ..
-
해결됨초보자를 위한 BigQuery(SQL) 입문
JOIN 4번 문제
4번 문제 같은 경우, 쿼리 효율화를 위해서는 trainer_pokemon테이블에서 status로 행을 줄여주기 보단, Trainer에 master 조건으로 행을 줄여주고 trainer_pokemon을 inner join하는게 더 좋은 방법 아닌가요?? 궁금합니다!
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
리텐션 과제 작성
안녕하세요. 리텐션 과제 작성하여 노션 링크 첨부하였습니다.제가 다른 분야에서 업무를 하다가 앱 로그 데이터를 처음 다뤄보게 되었는데 어려운 점이 많네요.. ㅠ 과제를 진행하면서 모르겠는 점도 있고 해서 먼저 피드백을 받고 다시 진행해보려고 합니다.좋은 강의 만들어주셔서 감사합니다!https://www.notion.so/staticstic/880f80adb2d7414e8cfa417512b263d4?pvs=4