# BigQuery, 이제 SQL 파이프 구문 사용 가능

> Clean Markdown view of GeekNews topic #19284. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19284](https://news.hada.io/topic?id=19284)
- GeekNews Markdown: [https://news.hada.io/topic/19284.md](https://news.hada.io/topic/19284.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-02-18T08:56:13+09:00
- Updated: 2025-02-18T08:56:13+09:00
- Original source: [cloud.google.com](https://cloud.google.com/bigquery/docs/pipe-syntax-guide)
- Points: 13
- Comments: 3

## Summary

Pipe Query Syntax는 GoogleSQL의 확장 문법으로, 읽기 쉽고 유지보수가 용이한 선형 구조의 쿼리 작성을 가능하게 합니다. 이 문법은 기존 Standard SQL과 달리 연산 순서를 자유롭게 지정할 수 있으며, 중첩 서브쿼리 없이도 복잡한 쿼리를 작성할 수 있습니다. 또한, Pipe 연산자를 통해 여러 단계의 쿼리를 구성할 수 있어 가독성과 유지보수성이 향상됩니다.

## Topic Body

### 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 기본 구조  
- 1. `FROM` 절로 시작  
- 2. `|>` (pipe 연산자) 뒤에 연산을 추가  
- 3. 여러 개의 `|>` 연산자를 연결하여 단계적으로 쿼리를 구성  
  (예: 필터링 → 집계 → 조인 순서 변경 가능)  
- 핵심 특성   
  - 어떤 쿼리에도 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` 단계로 지원되는 것이며, 아직 지원은 제한적

## Comments



### Comment 34764

- Author: carnoxen
- Created: 2025-02-18T17:58:39+09:00
- Points: 1

https://github.com/tc39/proposal-pipeline-operator  
  
꽤 낯이 익은 연산자로군요

### Comment 34761

- Author: halfenif
- Created: 2025-02-18T16:29:45+09:00
- Points: 1

prql을 먼저 보고 구글의 파이프라인 문법을 보니. 살짝 산만하군요.

### Comment 34731

- Author: neo
- Created: 2025-02-18T08:56:13+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42998904) 
* 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가 확장 기능으로 이를 지원하면 가능성이 있을 것임
