728x90
반응형

Machine Learning/[Kaggle Course] SQL (Intro + Advanced) 11

효과적인 쿼리문 작성법

한 번만 실행하거나 작은 데이터셋에 적용할 쿼리문은 효율적으로 작성할 필요가 없습니다. 하지만 이와 반대되는 경우, 웹사이트/기업데이터 유저들의 대기 시간을 줄이기 위해 효율적으로 작성해야 합니다. 대부분의 Database System은 Query Optimizer(쿼리 최적화)를 가지고 있습니다. 이는 당신의 쿼리문을 해석하고 실행할 때 가장 효율적은 방법으로 되도록 해줍니다. 몇몇의 전략은 여전히 비용을 많이 절감할 수 있습니다. useful FUNTIONs show_amount_of_data_scanned() : 쿼리문에 사용된 데이터양을 보여줌 show_time_to_run() : 쿼리문 실행에 걸린 시간을 출력 from google.cloud import bigquery from time imp..

Nested and Repeated Data

Nested data pets table의 ID와 toys table의 Pet_ID를 이용해 각 장난감의 주인이 어느 반려동물의 것인지 연결지으러 합니다. pets_and toys_ table 속 Toy column을 바로, nested column으로 두려 합니다. 이 곳에는 toys table의 'name'(Toy_name)과 'type' column(Toy_Type)이 엮인 정보가 저장 됩니다. 이를 위해 어떤 column을 선택해야할 지 미리 정한 뒤, query에 적어줍니다. Nested column은 STRUCT (or RECORD) type을 가집니다. 아래의 table의 스키마(=해당 table의 구조)에 이 형식이 반영되어 있습니다. Repeated data 한 동물이 여러 개의 장난감을..

How to Define Analytic/window Functions

analytic functions은 aggregate function과는 달리 본래의 table 속 각 row의 값을 돌려줍니다. 그럼, 비교적 간단한 query문으로 복잡한 계산을 수행할 수 있습니다. 예로 여러 대상들에 대해 총 달린 거리와 그 평균을 빠르게 계산할 수 있습니다. Syntax analytic func 정의 방법을 이해하기 위해, 경기에서 훈련한 서로 다른 두 집단의 data를 가진 table로 연습해봅시다. id column은 각 달리기 선수들을 의미하며, date column은 훈련 날짜가 기록되어있고 time column은 분단위로, 선수들이 훈련에 헌신한 시간을 보여줍니다. 각 선수들의 훈련시간의 이동 평균거리를 아래의 query를 이용하여 계산해보려 합니다. 모든 analyti..

JOINs and UNIONs

INNER JOIN Inner JOIN을 하니, 'oweners'의 Veronica Dunn씨와 'pets'의 Maisie가 누락되었습니다. 이럴 때 다른 JOIN을 써야 합니다. LEFT JOIN & (RIGHT JOIN) LEFT JOIN: 왼쪽에 적은 table의 모든 row를 포함하여 join하기 맨 위 사진의 INNER JOIN으로 명시된 부분을 LEFT JOIN으로 바꾸기만 하면 됩니다. RIGHT JOIN: 오른쪽에 적은 table의 모든 row를 포함하여 join하기 FULL JOIN 두 TABLE의 모든 rows를 반환. 일반적으로, 모든 row가 서로 매칭되는 경우는 극히 드물기에 그런 경우에 대해서 'NULL' entry가 생성되어 missing value를 채워줍니다. UNION J..

JOIN

ID - 반려동물 주인 ID number Name - 주인 이름 Pet_ID - 해당 주인의 반려동물 ID number ('pet' table의 ID와 일치 ID - ID number for the pet Name - name of the pet Animal - type of animal 'owner' table의 pet_id와 'pet' table의 id는 같은 동물을 가리키므로 이를 이용해 JOIN 이를 통해 해당 동물의 이름을 알면 그 주인의 이름을, 또는 주인의 이름을 알면 그 동물의 이름과 종을 알 수 있음. JOIN ... ON 위의 query에서, ON 명령문은 각 table에서 어느 column을 다른 여러 table에 결합시킬지 결정합니다. ID column은 두 table에 있으므로, ..

AS & WITH

이번 튜토리얼에서 사용할 'pets' table 동물의 나이를 포함하고 있음. AS 생성할 column의 이름을 바꾸는 데 사용했죠. 이를 aliasing이라고 불렀구요. Python에서도 aliasing을 하기 위해 as를 씁니다. 대신 pandas나 seaborn을 import 해야하죠. AS를 SQL에서 사용하려면, 선택한 column 직후에 AS를 명시해야합니다. AS 없는 query AS를 포함한 query f0__가 'Number'로 변환 WITH ... AS => CTE CTE (common table expression)은 AS와 WITH을 함께 쓰는 것을 일컫습니다. 이는 일시적인 table로, 내가 작성한 여러 개의 query들을 읽을 수 있을만큼 덩어리로 구분시켜 분리하는데 도움됩니다..

ORDER BY

앞의 내용 정리 SELECT - table에서 특정 column 가져오기 WHERE - SELECT한 column 중 특정 조건에 해당하는 row로 범위를 축소하여 가져오기 COUNT() - one of aggregate functions -> GROUP BY -> 여러 개의 rows를 하나의 group으로 이번 튜토리얼에서 볼 datset은 다음과 가틋ㅂ니다. ORDER BY 보통 query의 가장 마지막 절에 쓰게 됩니다. 그 query의 결과를 정렬도 해주죠. 내림차순으로 하고 싶다면 DESC를 적어주세요 DATE, DATETIME format BigQuery에서 DATE 관련 함수 정리 사이트 DATE ( + time = DATETIME) EXTRACT 특정 날짜(년or월or일)에 대해서만 보고 ..

HAVING vs WHERE

WHERE 항상 FROM 절 밑에 위치. 조건절로 구체적인 조건을 줄 수 있음 모든 column(필드)에 대해 조건절을 적용 가능 즉, WHERE 조건절에 부합하는 정보를 우선적으로 가져온 뒤에 GROUP BY query_where = """ SELECT columns~~ FROM 테이블명 WHERE 조건절 """ HAVING 항상 GROUP BY 절 밑에 위치. 조건절로 구체적인 조건을 줄 수 있음. group by된 후의 특정한 column(필드)로 그룹지어진 새로운 테이블에만 조건절 적용 가능 grouping 후 having 존걸절에 맞는 정보를 가져옴. -> 이 때 having 조건절에 사용할 column은 반드시 SELECT에 명시하기! query_having = """ SELECT column..

GROUP BY, HAVING & COUNT()

Grouping과 Counting은 아래와 같은 질문에 도움됩니다 - 해당 가게에서 각 과일마다 몇 개씩 팔았는지 - 동물병원에 얼마나 많은 종들이 보호되고 있는지 알고 싶을 때, 이번에 쓸 dataset은 오른쪽 그림입니다. COUNT( ) 이름을 보고 추측한 뒤 물건의 갯수를 알고 싶을 때, parameter로 column의 이름을 넣으면 됩니다. 해당 column의 entry의 개수를 알려줍니다. COUNT()는 aggregate function 중 하나입니다. 많은 값들을 입력으로 받은 뒤 하나의 값을 출력하죠. ( ex_ SUM(), AVG(), MIN(), MAX() ) 위의 사진을 보시면 column 이름이 f0__라는 알 수 없는 이름이 들어갔습니다. 이름 바꾸는 법은 나중에 다루니 일단 ..

SELECT, FROM & WHERE (qeury=질문)

이번 튜토리얼에서는 pet_records라는 dataset을 사용합니다. pets이라 불리는 하나의 table만 가진 dataset입니다. SELECT ... FROM 하나의 table(FROM) 속에 있는 하나의 column(SELECT)을 선택하는 명령문 FROM에는 꼭 backticks(`)를 써야하는 점 주의! single or double quote NOPE! (',") WHERE ... BigQuery dataset은 많이 크기에, 특정 조건에 맞는 rows만 추출하여 사용하게 되는 경우가 많습니다. 그럴 때 WHERE을 사용합니다. Ex) What are all the U.S. cities in the OpenAQ dataset? 해당 dataset의 미국의 대기 quality가 담겨있습니다..

728x90
반응형