묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
biquery 테이블 생성 오류 이슈
안녕하세요. 빅쿼리에서 테이블 생성을 하려고 했으나 계속 실패하여 문의 남깁니다. 파싱 문제가 있는 것 같고, 결제 수단 등록 같은 어드민 문제는 아닌 것 같습니다. 윈도우이고 반디집으로 압축 해제한 뒤 파일 업로드했고 아래와같이 파일 형식도 지정했는데 못 읽는 이유가 있을까요? 감사합니다.오류 메시지: 테이블을 만들 수 없음: Error while reading data, error message: The Apache Orc library failed to parse file metadata from file tail with error: Not an ORC file File: bigstore/bigquery-prod-upload-us/prod-scotty-455134432611-bde32926-0829-41cc-80fa-43f553dc0a93
-
미해결초보자를 위한 BigQuery(SQL) 입문
battle table 오류
현재 battle 미리보기 오류까진 해결하는 방법을 확인해서 basic2로 새로 세팅해서 battle을 만드는 과정에 있습니다. 그과정에서 해당 오류가 뜨고 있습니다. 이렇게 세팅된 상태이긴합니다. 근데 battle. CSV 파일 확인해보니 timestamp 쪽에서 사용자지정이 아닌 일반으로 되어, 시간이 안나오고 문자열로 된 상태인데, 이거땜에 오류가 발생하는건지 문의드립니다.테이블 만들기
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
동일하게 쿼리를 작성했는데 화면과 다른 값이 나옵니다
SELECT user_id , event_date , event_name , event_timestamp , user_pseudo_id , MAX(IF(par.key='firebase_screen', par.value.string_value, NULL)) AS firebase_screen , MAX(IF(par.key='food_id', par.value.int_value, NULL)) AS food_id , MAX(IF(par.key='session_id', par.value.string_value, NULL)) AS session_id FROM `advanced.app_logs` CROSS JOIN UNNEST(event_params) AS par WHERE event_date = '2022-08-01' GROUP BY ALL LIMIT 100; app_logs 피벗하는 문제인데 food_id가 null 밖에 없는 건 아니지만 보여주신 화면과 그 값이 많이 상이한 거 같아서요.. 이유가 뭔지를 알 수 있을까요 ㅜㅜ
-
해결됨초보자를 위한 BigQuery(SQL) 입문
location IS NOT NULL 을 굳이 안 써도 되지 않나요?
문제 3번입니다.hometown 값은 존재하고, location이 NULL일 때 WHERE에서 tp.location = t.hometown 진행하면 자동으로 FALSE가 나오지 않을까요?location IS NOT NULL 구문을 추가하신 이유가 궁금합니다.
-
미해결초보자를 위한 BigQuery(SQL) 입문
12강 집계 함수
안녕하세요. 12강 집계 함수 연습 문제 7~9 번 풀이 중 궁금한 것이 있습니다. 9번 문제의 경우 풀이해주실때 SELECT 이후 컬럼 generation 을 작성해주셨는데 , 8번 문제 풀이 시 select 이후 컬럼 을 따로 작성하지 않아서 두 가지 모두 쿼리문에 작성해본 결과 , 컬럼을 작성했을 경우 결과에서도 컬럼이 함께 나온다는 것을 확인 할 수 있었습니다. 이런 것은 문제를 풀다보면 결과에 컬럼이 같이 표기가 되어야 하는건지 아닌지를 구분해서 해야하는 것인지 궁금합니다 .비전공자라 다소 질문에 부족한 부분이 있을 수 있는데, 답변 주시면 감사하겠습니다 🙂
-
해결됨초보자를 위한 BigQuery(SQL) 입문
2-6. 연습 문제 1~3번
type2 null이 있음에도 불구하고, count시 값이 0으로 노출됩니다.[테이블 미리보기][쿼리 결과] [엑셀 파일]*맥 압축파일을 윈도우 환경에서 오픈해서 그런지, 파일 상태가 이상해요.값이 이렇게 들어갈 수가 있나요?
-
해결됨초보자를 위한 BigQuery(SQL) 입문
안녕하세요! 11번 문제 query문에 관해 질문드립니다
저 같은 경우 가장 많은 type1이 뭐냐는 질문에 max함수를 이용했는데, 선생님은 count랑 order by로 사용하셨더라고요. max함수를 사용하지 않은 이유가 있으신가요? 아래는 제가 작성한 query입니다SELECT MAX(type1) FROM `basic.pokemon` WHERE type2 is not null
-
미해결BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[과제] 퍼널 PIVOT 테이블 작성하기
안녕하세요 카일님!강의 너무 잘 듣고 있습니다! 온오프라인에서 SQL실무와 관련된 강의가 없어 많이고민했는데 카일님 강의 덕분에 입문 강의 부터 정말 많이 배웠습니다 ㅜㅜ! 아래 일자별 퍼널을 PIVOT 해보는 쿼리를 짜봤는데 피드백 주시면 너무 감사하겠습니다!더불어서 PIVOT을 할 때 제가 아래 주석처리한 것들도 디버깅 했을때는 동일하게 나왔는데혹시나 실무단에서 어떻게 하는건 조심해야한다! 라는 부분이 있을지도 궁금합니다..! 항상 감사합니다 :) #일자별 퍼널 PIVOT WITH base AS ( SELECT event_date, event_timestamp, event_name, user_id, user_pseudo_id, platform, MAX(IF(param.key = "firebase_screen", param.value.string_value, NULL )) AS firebase_screen, -- 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, -- param.key AS screen, -- param.value.string_value AS string_value, -- param.value.int_value AS int_value, FROM `advanced.app_logs` CROSS JOIN UNNEST(event_params) AS param WHERE -- event_date = "2022-08-01" #적은 데이터로 쿼리를 작성하기 위해 만들어둔 조건 event_date BETWEEN "2022-08-01" AND "2022-08-18" GROUP BY ALL ), filter_event_and_concat_event_and_screen AS ( SELECT * EXCEPT(event_name,firebase_screen), CONCAT(event_name, "-", firebase_screen) AS event_name_with_screen, DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul") AS event_datetime FROM base WHERE event_name IN ("screen_view", "click_payment") ), event_by_user_cnt_by_date AS ( --event_name + screen (필요한 이벤트만 WHERE 조건에 걸어서 사용) --step_number + COUNT --step_number : CASE WHEN 사용해 숫자 지정 1~6 (welcome, home, food_category, restaurant, cart ) SELECT -- DISTINCT event_name_with_screen, #해당 열 Unique값 확인 가능 event_date, #일자별로 퍼널별 유저수 쿼리 event_name_with_screen, -- event_datetime, user_pseudo_id, 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-restaurarnt" 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 user_pseudo_id) AS cnt FROM filter_event_and_concat_event_and_screen GROUP BY ALL --screen_view-restaurant/screen_view-food_detail/screen_view-search/screen_view-search_result 도 퍼널 정의에 어떻게 넣을지 생각해보고 단계에 넣어보기 > 고객이 어떤 흐름으로 움직이는지 확인해보기 HAVING step_number IS NOT NULL ORDER BY event_date ) SELECT event_date, SUM(IF(event_name_with_screen = 'screen_view-welcome', cnt, NULL)) AS screen_view_welcome, SUM(IF(event_name_with_screen = 'screen_view-home', cnt, NULL)) AS screen_view_home, SUM(IF(event_name_with_screen = 'screen_view-food_category', cnt, NULL )) AS screen_view_food_category, SUM(IF(event_name_with_screen = 'screen_view-restaurarnt', cnt, NULL)) AS screen_view_restaurarnt, SUM(IF(event_name_with_screen = 'screen_view-cart', cnt, NULL)) AS screen_view_cart, SUM(IF(event_name_with_screen = 'click_payment-cart', cnt, NULL)) AS click_payment_cart, -- MAX(IF(event_name_with_screen = 'screen_view-welcome', cnt, NULL)) AS screen_view_welcome, -- MAX(IF(event_name_with_screen = 'screen_view-home', cnt, NULL)) AS screen_view_home, -- MAX(IF(event_name_with_screen = 'screen_view-food_category', cnt, NULL )) AS screen_view_food_category, -- MAX(IF(event_name_with_screen = 'screen_view-restaurarnt', cnt, NULL)) AS screen_view_restaurarnt, -- MAX(IF(event_name_with_screen = 'screen_view-cart', cnt, NULL)) AS screen_view_cart, -- MAX(IF(event_name_with_screen = 'click_payment-cart', cnt, NULL)) AS click_payment_cart, -- MAX(CASE WHEN event_name_with_screen = 'screen_view-welcome' THEN cnt END) AS screen_view_welcome, -- MAX(CASE WHEN event_name_with_screen = 'screen_view-home' THEN cnt END) AS screen_view_home, -- MAX(CASE WHEN event_name_with_screen = 'screen_view-food_category'THEN cnt END) AS screen_view_food_category, -- MAX(CASE WHEN event_name_with_screen = 'screen_view-restaurarnt'THEN cnt END) AS screen_view_restaurarnt, -- MAX(CASE WHEN event_name_with_screen = 'screen_view-cart'THEN cnt END) AS screen_view_cart, -- MAX(CASE WHEN event_name_with_screen = 'click_payment-cart'THEN cnt END) AS click_payment_cart FROM event_by_user_cnt_by_date GROUP BY event_date ORDER BY event_date ;
-
해결됨초보자를 위한 BigQuery(SQL) 입문
2-6 #2 WHERE vs. HAVING절 사용 여부 차이
제 쿼리문 작성 결과입니다. 멘토님이 작성해주신 것과의 차이를 보았을 때 조건이 HAVING절로 표현되었는지 WHERE절로 표현되었는지에 대한 차이, GROUP BY에 type2에 대한 출력값도 요구한다는 점이 차이로 보입니다. 강의 내용 중에 HAVING은 'GROUP BY 후 조건 설정할 때' 사용된다는 표현이 있어서 헷갈림이 있었던 것 같습니다. 이 문제를 HAVING절을 사용하여서 푸는 방법도 있을지요? 그렇지 않다면 이유는 무엇이 되는지요? 감사합니다.
-
해결됨초보자를 위한 BigQuery(SQL) 입문
섹션 별 퀴즈
질문이 있는 경우 다음과 같이 시도해보고 공유해주세요구글에 검색한 후, 어떤 결과가 나왔는지그 결과를 토대로 어떤 시도를 했는지? 시도에서 어떤 과정이 진행되지 않았는지데이터를 추출하는 과정에 대한 고민은 Input / Output을 작성해주세요 안녕하세요.시작 전에 문제를 풀고 강의를 수강하라고 하셨는데말씀주신 문제가 섹션별로 나와있는 퀴즈를 말씀하신걸까요?
-
미해결마케터와 기획자를 위한 GA4 Bigquery 입문 (2025)
강의노트
안녕하세요강의에서 설명하시는 강의노트는 다운받을 수 있는 방법이 있나요?
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
array 등
안녕하세요 데이터분석가로 근무하고 있는 수강생입니다.array 등과 같은 기능이 저는 다소 생소한데 자주 쓰는 문법인지 궁금합니다ㅣ
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
N day 리텐션 쿼리 관련 질문
카일스쿨님 매번 친절한 답변 감사드립니다 정말 많이 배웁니다!!🙇N day 리텐션 쿼리에 관한 질문이 3가지 있습니다. 1. 맨 처음에 base 테이블 만들 때 DISTINCT를 왜 써야하는 건지 궁금합니다.(B방법 기준) first_date_and_diff 임시테이블을 만들 때 DISTINCT를 쓰는 것은, '동일 유저가 하루에 여러번 접속한 것을 중복 제거하기 위해' 사용하는 것으로 이해했습니다.그런데 맨 처음에 base 테이블은 timestamp 컬럼이 있는데 어떻게 중복이 있을 수 있는 건지 헷갈립니다. 완전히 동일한 마이크로초에 여러번의 행동 로그가 기록될 수 있는 건지, 아니면 전산오류로 로그가 중복 기록이 될 수 있다는 건지,, 이해가 잘 안 됩니다😢2. 강의에서 보여주신 결과 테이블(diff_of_day | user_cnt)은 교안 330p와 다른 것이라고 이해했는데, 제가 이해한 것이 맞는지 확인 부탁드립니다!a) 강의 결과 테이블: 유저마다 시작일은 다를 수 있지만, 어쨌든 궁금한 건 각 유저들이 첫 접속 이후에 계속 쓰는지가 궁금한 것 → 가입일 코호트별로 그룹화하지 않아도 그자체로 의미가 있음b) 교안 330p 테이블: 강의 결과에서 한 단계 더 나아가서, 가입일에 따라 리텐션 추이에 차이가 있는지 더 쪼개보는 것c) 만약 교안 330p 테이블처럼 결과를 출력하고 싶으면, COUNT 집계할 때 GROUP BY와 SELECT에 first_date만 추가로 넣어주면 된다. (아래 쿼리 및 사진 참고)-- a) 강의 결과 SELECT diff_of_day, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_date_and_diff GROUP BY diff_of_day ORDER BY diff_of_day -- c) 교안처럼 출력하고 싶을 경우 SELECT first_date, diff_of_day, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_date_and_diff GROUP BY first_date, diff_of_day ORDER BY first_date, diff_of_day 3. Weekly 리텐션 파트에서 설명해주신 WEEK 함수는 어떻게 쓰는 걸까요?아래 쿼리처럼 썼더니 WEEK 함수가 없다고 오류가 나던데, EXTRACT를 말씀하시려던 걸까요? EXTRACT는 제대로 나오는 거 같긴 합니다..! SELECT user_pseudo_id, event_name, event_date, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week, EXTRACT(WEEK FROM event_date) AS event_week2, WEEK(event_date) AS event_week3 FROM( SELECT DISTINCT -- event_timestamp 기반으로 중복 제거 user_id, event_name, -- event_date, -- Firebase의 형태(ex. '20220813')와 다르니까, 아래처럼 직접 추출 DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, user_pseudo_id FROM advanced.app_logs WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03") 항상 감사드립니다!! 완강까지 달려보겠습니다!
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
이동평균 계산 시 order by 기본값은 뭔가요?
윈도우 함수 연습문제 6번 질문입니다.카일스쿨님 쿼리와 다른 건 다 동일하게 작성했었는데, OVER() 안에 order by를 모르고 깜빡했었습니다.그런데도 결과가 정답(moving_avg2)과 같게 정상 출력이 되었습니다. (QUALIFY로 검증해봤는데 moving_avg와 전부 같다고 나오더라구요)원래 ORDER BY를 안 써줘도 프레임 설정이 자동으로 가능한 걸까요? ORDER BY에도 기본값 같은 게 있는지 궁금합니다.-- 윗부분은 생략 SELECT date, number_of_orders, AVG(num2) OVER(ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg, AVG(num2) OVER(ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg2 FROM filled_data -- QUALIFY moving_avg != moving_avg2 ORDER BY date
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
윈도우 연습문제 1번 질문
실행 결과는 동일하게 나왔는데, COUNT를 다르게 쓴 것이 괜찮은지 궁금해서 질문 남깁니다!상황같은 날짜에 여러 번 쿼리 실행한 사용자들이 있어서 COUNT(*)을 해야겠다고 판단했습니다. (어차피 Distinct가 없으면 같은 날짜라도 각각 카운트한다는 것을 깜빡했었습니다ㅠ)카일스쿨님은 COUNT(query_date)를 쓰셨고, 결과만 보면 제 쿼리와 동일하긴 합니다.궁금한 점제 쿼리처럼 COUNT(*)을 쓰는 경우에 문제가 될까요? 혹시 실무적으로 COUNT(*)은 잘 쓰지 않는지 궁금합니다!(Ex. 어떤 컬럼의 개수를 세는 것인지 가독성이 좋지 않다든가..)제 쿼리는 아래와 같습니다. SELECT *, COUNT(*) OVER(PARTITION BY user) AS total_query_cnt FROM advanced.query_logs ORDER BY query_date, user
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
user_id에 NULL이 나오는데 정상인가요?
array, struct 연습문제 4번에 대한 질문입니다.위 사진처럼 카일스쿨님과 동일한 쿼리를 작성했는데, 출력 결과가 다르게 나와서 문의드립니다. 질문1:사진에 보시듯이 user_id 컬럼에 NULL이 들어간 행들이 있는데, 제가 뭔가 잘못한 걸까요? 만약 NULL이 나오는 게 정상이라면 그 이유도 궁금합니다!질문2:만약 NULL이 나오는 게 정상이라면, 실무에서도 이렇게 id 컬럼에 null이 허용되는지 궁금합니다. 보통 이런 id 값은 primary key로 쓰는 줄 알았어서요..!질문3:연습문제 뒤에 추가로 COUNT 출력해보는 것도 결과(cnt)가 다른데, 이것도 정상인지 확인부탁드립니다. 혹시 카일스쿨님이 강의 찍으실 때 쓰신 데이터셋과 변동사항이 있나요?
-
해결됨초보자를 위한 BigQuery(SQL) 입문
espanso 설치 완료 후 프로그램 실행 문제
espanso 설치는 분명히 되었는데 프로그램이 실행이 안됩니다ㅠㅠ 관리자 권한으로 실행해도 계속 안되고 cmd에서 path를 입력해보고 수업시간에 배우는 걸 모두 입력해도 저런 결과가 나옵니다. 해결방법이 있을까요?
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
3-13 리텐션 과제 제출
3-13 리텐션 과제 제출합니다!https://www.notion.so/13-22f60e878b2580c097eaf0e1eb15d73c?source=copy_link 혼자 쿼리를 쓰다가 고객 정의를 내리고 나니 너무 어려워 AI의 도움도 받고, 여러 방법으로 좀 접근을 해봤습니다만.. 정의를 너무 어렵게 내린 것 같아 시간이 오래 걸렸네요ㅠㅠ 서비스나 업종마다 다르겠지만, 일반적으로 신규, 활성, 복귀, 휴면 유저에 대한 정의는 어떻게 내리고, 분석을 어떤 식으로 진행하는 건가요? 과제를 진행하긴 했으나 쿼리가 제대로 작성된 게 맞는지 분석을 올바르게 한 게 맞는지 너무 어렵군여ㅠ
-
해결됨초보자를 위한 BigQuery(SQL) 입문
Syntax에러
trainer 탭 클릭하고 쿼리 실행했는데 syntax error나오고,trainer 탭 클릭 > 쿼리 버튼 > 비어있는 제목없는 쿼리 생성SELECT*FRObasic.pokemonORDERBYid실행해도 하단과 똑같은 syntax 에러가 납니다. 어떻게 해야될까요?
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
최종 과제 제출
안녕하세요, 로그를 분석해서 글로 작성해보았습니다.혹시 가능하시다면 한번 보시고 개선하면 좋을 점을 알려주시면 공부를 이어가는 데 많은 도움이 될 것 같습니다!🙇♂노션 페이지 링크 남깁니다.https://www.notion.so/inflearn-app_logs-24eceb39ae70805f81abfee9aa86ebc2?source=copy_link고민되었던 부분장황하게 이것저것 설명은 했지만, 결국 도출한 결론은 '결제 경험이 있는 사용자의 재방문을 발생시켜서 결제 건수를 높여보자 ' 입니다. 재방문 사용자가 유입되도록 하고 행동을 지켜보자는 것인데,, 이러한 액션이 특별히 효과적일 것이라는 것을 로그로부터 미리 확인할 수 있는 방법이 있을까요..?구체적으로 어떤 집단에 액션을 수행하자는 결론을 도출하고 싶었는데 잘 되지 않은 것 같습니다