본문 바로가기

Coursera 강의 정리/Modern Big Data Analysis with SQL

S2 Analyzing Big Data with SQL - W5 Sorting and Limiting Data

Modern Big Data Analysis with SQL 특화 과정 중 두 번째 강의 Analyzing Big Data with SQL

다섯 번째 주차 Sorting and Limiting Data 내용 정리입니다.

ORDER BY는 정렬을 위한 구문

LIMIT은 행의 개수를 제한하며, Top-N 질의를 구축하거나 SQL 엔진의 과부하를 줄여준다. OFFSET과 같이 사용하셔 Pagination 기능도 구현 가능하다.

SQL 작성 순서: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT

SQL 처리 순서: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY, LIMIT

ORDER BY 구문

기준에 따라서 행을 정렬하는 구문이다. 기본적으로 오름차순(ASC)으로 정렬하며 내림차순으로 정렬할 때에는 DESC 키워드를 사용한다. ORDER BY의 기준으로는 다수의 테이블 열 이름, Column Reference, Expression을 사용할 수 있으며, 개별 정렬 기준마다 오름차순과 내림차순을 결정할 수 있다.

 

SQL 엔진마다 Missing Value의 순서는 차이가 있다.

 

1)      Impala, PostSQL: NULL은 가장 큰 값으로 ASC의 마지막에 위치

2)     Hive, MySQL: NULL은 가장 작은 값으로 ASC의 처음에 위치

 

의도적으로 NULL 값의 위치를 조정하기 위해서 NULLS FIRST, NULLS LAST 키워드가 있다. 

 

빅 데이터에서 ORDER BY 연산은 비용이 큰 연산으로 필터링을 통해서 대상이 되는 행의 수를 줄이는 것을 권장한다. 또한 Hive에서는 ORDER BY의 기준이 항상 Select List에 포함되어 있어야 한다.

LIMIT 구문

반환하는 행의 개수를 제한하는 구문이다. 테이블의 일부를 추출하여 데이터를 확인하거나(랜덤 샘플링은 아님), 출력해야 하는 행의 개수가 많아서 SQL 연산에 부하가 걸리는 것을 막기 위해 활용한다. 일반적으로 ORDER BY와 같이 사용해서 Top-N 질의를 구축한다.

 

LIMIT은 OFFSET 키워드와 같이 사용하면 Pagination 기능을 구현할 수 있다. OFFSET 키워드는 생략하는 행의 개수를 의미한다.

SELECT 구문 처리

SELECT 구문을 작성하는 순서와 SQL 엔진이 처리하는 순서는 다르다.

 

1)      구문 작성 순서: SELECT > FROM > WHERE > GRUPO BY > HAVING > ORDER BY > LIMIT

2)     엔진 처리 순서: FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT

 

하지만, 일부 SQL 엔진은 Select List를 먼저 처리해서 다른 구문에서 Column Alias 사용 가능하게 만든다.