yeznable

[ 쿼리 ] Advanced SQL for Data Professionals (7) - Transforming an Array to Rows 본문

하는 일/데이터엔지니어링

[ 쿼리 ] Advanced SQL for Data Professionals (7) - Transforming an Array to Rows

yeznable 2024. 12. 6. 18:41
728x90

이 포스트는 Medium에 올라온 다음 아티클을 참고하여 정리한 글입니다.

 

Advanced SQL for Data Professionals

To start working with data, it is important to learn tools like SQL. Structured Query Language (SQL) is a programming language used for…

medium.com


Medium 아티클에서 소개하는 Transforming an Array to Rows의 의미는 Array로 주어진 값을 Row로 구성한 데이터를 만든다는 뜻 같다.

Databricks에서 CTE를 지원하지 않기 때문에 이전에 소개된 CTE를 활용해 date dimension table createion 과 같은 결과를 만들고자 할 때 이런 기능이 필요하다.


[ Using EXPLODE in Databricks SQL ]

# 이 쿼리는 Databricks 문법으로 쓰여진 쿼리이다
# MySQL로는 실행되지 않는다.
SELECT date,
DATE_PART('YEAR', DATE) year,
DATE_PART('month', DATE) month
FROM (
	SELECT 
	EXPLODE(SEQUENCE(DATE'2024-01-01', DATE'2024-12-31',INTERVAL 1 DAY)) AS date
) AS calendar

 

Databricks에서 쿼리한 결과가 오른쪽과 같다.

Databricks 실습 환경이 있지는 않아서 확신할 수는 없지만 설명을 봤을 때 SEQUENCE 함수는 Array를 만들어 주고 EXPLODE 함수는 Array를 Rows로 변환해주어서 이와 같은 결과를 내는 것 같다.

 

 

 

 


[ UNNEST: DuckDB and BigQuery ]

# 이 쿼리는 DuckDB 또는 BigQuery 문법으로 쓰여진 쿼리이다
# MySQL로는 실행되지 않는다.
SELECT UNNEST([1, 2, 3]) AS qt

 

DuckDB와 BigQuery 실습 환경도 가지고 있지 않지만 해당 엔진들에서는 같은 기능을 UNNEST로 구현할 수 있다.

UNNEST로 Array [1, 2, 3]을 Rows로 변환한 결과는 오른쪽과 같다.

 

 


처음에 Databricks는 CTE를 지원하지 않아서 EXPLODE를 활용해 구현해야 한다고 언급되어있다.

MySQL에서 해당 기능을 구현하려면 CTE를 활용하는 것이 좋을 것 같다.

 

[ 쿼리 ] Advanced SQL for Data Professionals (1) - Common Table Expression(CTE)

이 포스트는 Medium에 올라온 다음 아티클을 참고하여 정리한 글입니다. Advanced SQL for Data ProfessionalsTo start working with data, it is important to learn tools like SQL. Structured Query Language (SQL) is a programming language

yeznable-blog.tistory.com

 

다음 포스트에서는 NTILE 내용을 정리한다.

 

728x90