GN⁺: BigQuery, 이제 SQL 파이프 구문 사용 가능
(cloud.google.com)Pipe Query Syntax란?
- GoogleSQL의 확장 문법으로, 읽기 쉽고 유지보수가 간편한 선형 구조의 쿼리 작성 가능
- 기존 GoogleSQL(Standard SQL)과 동일한 연산 지원(선택, 그룹화, 조인, 필터링 등)
- 연산 순서를 자유롭게 지정 가능하며, 중첩 서브쿼리 없이도 복잡한 쿼리 작성 가능
Standard SQL vs Pipe Query Syntax
- Standard SQL
- 특정한 구문 순서를 따라야 함
- 다중 집계를 사용하면 CTE(Common Table Expression) 또는 중첩 서브쿼리가 필요함
-
SELECT
,GROUP BY
,ORDER BY
에서 중복된 컬럼을 반복해야 함
- Pipe Query Syntax
- Pipe 연산자를 어떤 순서로든 적용 가능
- Pipe 연산자를 추가하는 것만으로 간단하게 다중 집계 가능
- 한 번만 컬럼을 선언하면 됨
Pipe Query Syntax 기본 구조
-
-
FROM
절로 시작
-
-
-
|>
(pipe 연산자) 뒤에 연산을 추가
-
-
- 여러 개의
|>
연산자를 연결하여 단계적으로 쿼리를 구성
(예: 필터링 → 집계 → 조인 순서 변경 가능)
- 여러 개의
- 핵심 특성
- 어떤 쿼리에도 Pipe 연산자 추가 가능 → 기존 GoogleSQL 쿼리 끝에 |> 연산자를 붙여 확장 가능
- 연산 순서가 자유로움 → 원하는 순서대로, 원하는 횟수만큼 연산자 적용 가능
- 모든 GoogleSQL 지원 환경에서 사용 가능 → 쿼리, 뷰, 테이블 반환 함수 등에서 활용 가능
- 기존 SQL 문법과 혼합 사용 가능 → 서브쿼리는 표준 SQL, 메인 쿼리는 Pipe 문법으로 작성 가능
- 이전 단계에서 정의한 모든 별칭(Alias)을 참조 가능
- FROM 절로 시작 가능 → 이후 |> 연산자를 추가하여 점진적으로 쿼리 확장 가능
Pipe Query Syntax 와 Standard SQL 의 차이점
-
FROM
절로 쿼리 시작 가능 - SELECT pipe 연산자는 집계를 수행하지 않음. AGGREGATE pipe 연산자를 사용하여 별도로 집계 수행
- WHERE pipe 연산자로 필터링 수행. 표준 SQL에서의 WHERE, HAVING, QUALIFY 기능을 하나로 통합. 어느 단계에서든 필터링 가능 → 유연한 쿼리 작성 가능
Pipe Query Syntax의 장점
- 논리적인 순서대로 쿼리 작성 가능 → 쿼리 가독성 향상
- 유지보수 용이 → 중첩 서브쿼리 없이도 복잡한 연산 수행 가능
- 유연한 연산 순서 → 원하는 순서대로 연산 적용 가능
- 필터링이 더 직관적 → WHERE을 활용하여 다양한 단계에서 데이터 필터링 가능
- 복잡한 집계 쿼리를 더 쉽게 작성 → AGGREGATE 연산자를 사용하여 명확한 집계 수행
Pre-GA
단계로 지원되는 것이며, 아직 지원은 제한적
Hacker News 의견
-
SQL의 파이프 문법이 2025년 1월 30일부터 Databricks에 구현되었음
- 이전에는 SQL 확장이 어려웠고, 테이블 값 함수가 복잡했음
- 이제는 고차 함수로 데이터 강화, 예측, 그룹화 등을 할 수 있게 되었음
- 예를 들어, 특정 날짜 이후의 주문을 필터링하고, 고객별로 총 지출을 집계한 후, 특정 금액 이상인 고객을 필터링하여 고객 정보와 조인할 수 있음
- 파이프를 사용한 반복 SQL은 GenAI와 함께 더 잘 작동할 수 있음
-
PRQL은 SQL로 컴파일되는 유사한 아이디어임
- 예를 들어, 송장 데이터를 필터링하고, 수수료를 계산한 후, 수익이 일정 금액 이상인 데이터를 필터링할 수 있음
-
SQL 문법 확장이 계속되면 복잡성이 증가할 수 있음
- SQL 구현자들이 외부 대체 문법을 더 잘 지원할 수 있도록 소스 맵 등에 집중했으면 좋겠음
- 각 프로젝트나 개인이 자신에게 맞는 SQL 문법 변형을 선택할 수 있게 됨
-
파이프 문법이 처음 발표되었을 때 SQLite 팀이 이를 시험해 보았음
- 파이프 문자가 필수적이지 않다는 것을 발견했으며, 문법이 파이프 문자가 선택적일 때도 작동함
- 개인적으로는 이 방식이 더 보기 좋다고 생각함
-
PRQL은 SQL DB를 위한 파이프 지향 문법으로, 새로운 언어이기 때문에 SQL과의 하위 호환성이 없음
- Google과 같은 대기업의 지원을 받지 못하지만, 문법이 더 깔끔함
-
DuckDB에서도 사용 가능함
-
파이프 뒤에 ">"를 입력하는 것이 번거로울 수 있음
-
Malloy 언어는 파이프 문법은 아니지만 유사한 분석적 문법을 가지고 있음
- Looker의 공동 창립자인 Lloyd Tabb가 개발함
-
Kusto Query Language를 사용한 이후로 SQL이 이와 같은 기능을 갖추기를 기대하고 있음
- 충분한 DB가 확장 기능으로 이를 지원하면 가능성이 있을 것임