목록Data Engineering (24)
zimslog
스노우플레이크 특수 기능 1. Time Travel테이블/스키마/DB의 과거 상태를 일정 기간 동안 조회하거나 복원 가능기본 1일(Enterprise Edition 이상은 최대 90일)예: 실수로 데이터를 지웠을 때도 복구 가능-- 과거 시점 데이터 조회SELECT * FROM sales AT (TIMESTAMP => '2025-09-01 12:00:00');-- 과거 시점으로 테이블 복원UNDROP TABLE sales; 2. Zero-Copy Cloning테이블, 스키마, DB를 실제 데이터 복제 없이 즉시 복제스토리지는 공유하고, 변경분만 기록(가상 복제)개발/테스트 환경 만들 때 비용과 시간이 거의 0CREATE TABLE sales_clone CLONE sales; 3. Storage-Comp..
정형/반정형 데이터 로드 https://quickstarts.snowflake.com/guide/getting_started_with_snowflake_kr/* 스노우 플레이크 공식 튜토리얼 참고! 1. 정형 데이터 로드 Context 지정 -> Table 생성 -> Stage 생성 -> 파일형식지정 -> 데이터 로드 -> 쿼리 해보기>1) Database 생성 & Context 지정: 데이터를 로드할 Database 를 생성한다. 또, 이 워크시트에서 사용할 Context (role, warehouse, database, schema) 를 지정한다.-- create dbcreate database citibike;-- context use role accountadmin;use warehouse ..
처음 정답 코드)-- 생산일자 22.5-- id, name, 총매출-- order by 총매출 desc, id ascSELECT F.PRODUCT_ID, F.PRODUCT_NAME, F.PRICE*O.AMOUNT AS TOTAL_SALESFROM FOOD_PRODUCT FJOIN (SELECT PRODUCT_ID, SUM(AMOUNT) AS AMOUNTFROM FOOD_ORDERWHERE DATE_FORMAT(PRODUCE_DATE,'%Y-%m') = '2022-05'GROUP BY PRODUCT_ID) OON F.PRODUCT_ID = O.PRODUCT_IDORDER BY TOTAL_SALES DESC, PRODUCT_ID ASC
프로그래머스 - 상품의 구매한 회원 비율 구하기 처음 정답 코드)SELECT YEAR(SALES_DATE) as YEAR, MONTH(SALES_DATE) AS MONTH, COUNT(DISTINCT S.USER_ID) AS PURCHASED_USERS, ROUND( COUNT(DISTINCT S.USER_ID)/J.CNT , 1) AS PURCHASED_RATIOFROM ONLINE_SALE SJOIN (SELECT COUNT(*) AS CNT FROM USER_INFO WHERE YEAR(JOINED) = 2021) JWHERE EXISTS (SELECT 1 FROM USER_INFO ..
프로그래머스 - 멸종위기의 대장균 찾기 처음 정답 코드)WITH RECURSIVE ED AS ( -- 정적 CTE 선언 가능 SELECT ID, PARENT_ID FROM ECOLI_DATA ), -- 동적 CTE 선언 R AS ( -- 1세대 먼저 넣고 SELECT ID, PARENT_ID, 1 AS gen FROM ED WHERE PARENT_ID IS NULL UNION ALL -- 1세대에 조인으로 자식 붙여서 2세대 -- 2세대에 조인으로 자식 붙여서 3세대 -- ... -- 조인할 게 없으면 자동으로 멈추네 SELECT C.ID, C.PARENT_ID, gen+1 FROM R P -- 여기서 R은 직전에서 추가된 ..
재귀적 CTE - WITH RECURSIVE AS WITH CTE는 정적 테이블을 만들고,WITH RECURSIVE CTE는 동적 테이블을 만든다. (자기 자신을 호출하면서 데이터 만듬) 기본 구문)WITH RECURSIVE cte AS ( SELECT 1 AS n -- 가장 첫번째 행 정의, 한번만 실행 UNION ALL SELECT n+1 FROM cte -- 두번째부터 마지막 행까지 정의 WHERE n SELECT 문에서 컬럼명 명시하지 않고, 테이블명(컬럼명)으로 지정해주어도 됨. 위 쿼리와 같은 결과WITH RECURSIVE cte(n) AS ( SELECT 1 UNION ALL SELECT n+1 FROM cte WHERE n 피보나치 수열) 첫째, 둘째 항..
MySQL 날짜 함수/연산 정리 1. 날짜 추출NOW(), CURDATE(), CURTIME() : 현재 날짜/시간, 날짜, 시간 추출DATE(), YEAR(), MONTH(), DAY(), WEEK(), DAYNAME(): 날짜, 연도, 월, 일, 주, 요일 추출DATE_FORMAT(col, format): format대로 추출 ex) '%Y-%m-%d' 2. 날짜 연산DATEDIFF(d1, d2) : d1 - d2DATE_SUB(d, INTERVAL 30 DAY) : 30일 전 날짜 계산LAST_DAY(d) : 해당 월의 마지막 날 계산 TIMESTAMPDIFF(MONTH, start, end) : 연, 월, 일 지정해서 차이 계산 3. 특정 날짜 / 패턴 찾기 월별 주문 건수)SELECT DAT..
Leetcode 180, 511 - 윈도우 함수 180. Consecutive Numbers# Write your MySQL query statement below-- 3번 이상 연속으로 나타나는 모든 숫자-- 정렬 없음-- ID로 정렬한 다음, 2번, 1번 앞의 숫자 현재 숫자와 비교SELECT DISTINCT T.num as ConsecutiveNumsFROM (SELECT LAG(num, 2) OVER (ORDER BY id) AS lag2, -- 2행 앞 num LAG(num, 1) OVER (ORDER BY id) AS lag1, -- 1행 앞 num num -- 현재 num FROM Logs) TWHERE T.lag1 = T.num AND T.lag2 = T.num 5..
윈도우 함수 정리 (순위 함수, 집계 함수) SELECT 수행 시에 특정 윈도우 안에서 순위를 계산하거나 집계할 때 사용한다.모든 윈도우 함수는 OVER절과 함께 쓰이고, OVER절 안에는 ORDER BY나 PARTITION BY절이 사용된다. 1. 순위 함수 + OVER ( 조건.. ): 동일 순위 처리 방식에 따라 사용하는 함수가 다르다. OVER 절과 함께 쓰이면 OVER 절 안의 ORDER BY 등 조건대로 순위를 계산한다.RANK() 1 2 2 4DENSE_RANK() 1 2 2 3ROW_NUMBER 1 2 3 4SELECT MPG, COUNT(*), RANK() OVER (ORDER BY COUNT(*) DESC) AS RANKFROM MTCARSGROUP BY MPG GROUP BY 후에..
1. 처음 정답 코드WITH -- 트럭에 대한 정보만 뽑음 TRUCK AS (SELECT CAR_ID, DAILY_FEE FROM CAR_RENTAL_COMPANY_CAR C WHERE CAR_TYPE = '트럭'), -- 히스토리에 기간 뽑음 HISTORY AS (SELECT HISTORY_ID, CAR_ID, DATEDIFF(END_DATE, START_DATE)+1 AS DAYS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY)SELECT H.HISTORY_ID, ROUND(T.DAILY_FEE*H.DAYS* (100-IFNULL(D.DISCOUNT_RATE, 0)) /100)..