SQL과 식으로 데이터 변환하기
약 30분 · 필터, 조인, 계산 열
워크플로의 작업 대부분은 하나의 작은 동작을 반복하는 것입니다. 테이블을 가져와 형태를 바꾸고, 그 결과를 새 테이블에 쓰는 것입니다. 이 튜토리얼에서는 행을 선택하고 필터링하고, 두 번째 테이블을 조인하고, 계산 열을 추가하는 과정을 통해 이 동작을 익힙니다. 이때 가장 자주 사용하는 두 가지 도구인 SQL과 열 식을 사용합니다. 이 패턴을 한 번 익혀 두면 앞으로 만들게 될 거의 모든 변환 단계에 적용할 수 있습니다.
여기서 목표는 함수를 외우는 것이 아니라 작업의 형태와 필요한 내용을 찾아보는 위치를 익히는 것입니다. PlaidCloud는 1,000개가 넘는 SQL 함수를 제공하며, 이 문서는 해당 레퍼런스로 연결할 뿐 내용을 그대로 옮기지 않습니다.
만들 내용
섹션 제목: “만들 내용”원본 orders 테이블을 읽어 완료된 주문만 남기고, 각 주문을 customers 테이블과 조인해 지역 정보를 가져오고, 계산 열 net_amount를 추가한 뒤 그 결과를 새 orders_clean 테이블에 쓰는 테이블 단계 하나를 만듭니다.
orders ─┐ ├─► select · filter · join · calculated column ─► orders_cleancustomers ─┘모든 소스 테이블은 그대로 유지됩니다. 변환 단계는 하나 이상의 소스에서 읽어 대상에 쓰며, 원본은 변경되지 않습니다. 그래서 워크플로를 안전하게 다시 실행하고 감사할 수 있습니다.
열을 가공하는 두 가지 방법
섹션 제목: “열을 가공하는 두 가지 방법”단계를 시작하기 전에 꼭 기억해 둘 구분이 하나 있습니다.
| 도구 | 설명 | 작성 위치 |
|---|---|---|
| SQL | 전체 테이블을 선택하고, 필터링하고, 조인하는 쿼리 | 단계의 SQL 편집기 |
| 식 | 행마다 열 하나의 값을 만들어 내는 단일 수식 | 열 매퍼의 식 셀 |
어떤 행과 어떤 테이블을 쓸지 결정할 때는 SQL을 사용합니다. 열 하나에 무엇이 들어갈지 결정할 때는 식을 사용합니다. 많은 단계에서 둘을 함께 쓸 수 있습니다. SQL 단계로 데이터 집합을 만들고, 식 셀로 열을 계산하는 방식입니다.
사전 요구 사항
섹션 제목: “사전 요구 사항”- PlaidCloud 워크스페이스와 작업할 프로젝트가 필요합니다. 아직 없다면 무료 체험을 시작하십시오.
- 프로젝트에 테이블 두 개가 이미 있어야 합니다. 이 튜토리얼은
orders(order_id,customer_id,status,amount,tax포함)와customers(customer_id,region포함)를 가정합니다. 이 테이블이 없다면 데이터 로드, 변환 및 게시 튜토리얼에서 먼저 CSV로 테이블을 가져옵니다. - Workflow Explorer에서 열려 있는 워크플로가 필요합니다. 프로젝트의 워크플로 탭을 열고 워크플로를 두 번 클릭합니다. 아직 워크플로가 없다면 워크플로 만들기를 참조하십시오.
1단계: SQL로 선택하고 필터링하기
섹션 제목: “1단계: SQL로 선택하고 필터링하기”범위를 좁혀서 시작합니다. 실제로 필요한 열과 행만 가져옵니다.
-
테이블 변환 단계를 추가하고 해당 단계의 SQL 편집기를 엽니다.
-
단계의 소스를
orders테이블로 지정합니다. -
필요한 열만 남기고 필요 없는 행은 제외하는 쿼리를 작성합니다.
SELECTorder_id,customer_id,amount,taxFROM ordersWHERE status = 'completed'AND amount > 0
WHERE 절이 바로 필터입니다. 완료되지 않았거나 금액이 0인 주문은 대상에 도달하지 못합니다. SELECT * 대신 열 네 개만 선택하면 다운스트림 테이블이 간결해지고 의도도 분명해집니다.
읽기 쉽게 SQL을 작성하십시오. 절마다 한 줄, 열마다 한 줄로 쓰고
CASE/WHEN을 정렬하며, 빽빽한 한 줄짜리 쿼리는 피하십시오. 편집기의 코드 정리 버튼(또는 Shift+Alt+F, macOS에서는 Shift+Option+F)을 사용하면 동작은 바꾸지 않고 서식만 정리합니다. 편집기에서 코드 정리(서식 지정)를 참조하십시오.
2단계: 두 번째 테이블 조인하기
섹션 제목: “2단계: 두 번째 테이블 조인하기”조인은 공통 키를 기준으로 두 번째 테이블의 열을 첫 번째 테이블 옆에 가져옵니다. 여기서는 customers에 있는 각 주문의 region이 필요합니다.
-
단계에
customers를 두 번째 소스로 추가합니다. -
공통 키로 조인하고 필요한 열을 가져오도록 쿼리를 확장합니다.
SELECTo.order_id,o.customer_id,o.amount,o.tax,c.regionFROM orders AS oINNER JOIN customers AS cON o.customer_id = c.customer_idWHERE o.status = 'completed'AND o.amount > 0
INNER JOIN은 일치하는 고객이 있는 주문만 남깁니다. 일치하는 고객이 없더라도 모든 주문을 유지하고 region을 null로 두려면 LEFT JOIN을 사용하십시오. 조인 키가 맞지 않거나 잘못되면 조인 결과의 행이 너무 많거나 적어지는 경우가 가장 흔합니다. 따라서 다음으로 넘어가기 전에 미리 보기(다음 단계)에서 행 수를 확인하십시오.
쿼리의 테이블 이름. 각 소스는 단계에서 부여한 이름으로 참조합니다. 기본 Lakehouse 웨어하우스에서는 물리 테이블 ID에 하이픈이 들어 있을 수 있습니다. 이 경우 엔진이 하나의 식별자로 읽도록 백틱으로 묶으십시오(예:
`analyzetable_9f3c...`).
3단계: 식으로 계산 열 추가하기
섹션 제목: “3단계: 식으로 계산 열 추가하기”이제 두 소스 어디에도 없는 값을 계산합니다. 계산(식) 열은 행마다 수식 하나를 실행하고 그 결과를 새 열에 씁니다. 세금을 제외한 금액인 net_amount를 추가합니다.
-
단계의 열 매퍼에서 이름이
net_amount인 새 대상 열을 추가합니다. -
해당 열의 식 셀에 수식을 작성합니다.
amount - tax -
조건이 필요한 경우에도 식에서 일반적인 논리를 사용할 수 있습니다. 예를 들어 배송 구분 플래그는 다음과 같습니다.
("free"if amount >= 100else "standard")
식 셀은 스크립트가 아니라 단일 수식입니다. 식 셀은 하나의 단순한 식으로 평가되므로, 여러 줄로 쓰는 식은 위 예시처럼 바깥쪽에 직접 괄호를 붙여야 합니다. 그렇지 않으면 실행할 때 실패합니다. 셀 하나에는 열 하나의 값만 넣고, 여러 행이나 여러 테이블에 걸치는 작업은 SQL 단계를 사용하십시오.
특정 함수가 존재하는지, 인수가 정확히 어떻게 동작하는지는 프로젝트가 사용하는 Lakehouse 세대에 따라 다릅니다. 두 세대는 서로 다른 업스트림 엔진을 따릅니다. 함수 이름을 추측하지 말고 찾아보십시오.
| Lakehouse | 함수 라이브러리 |
|---|---|
| v1 | Databend SQL 함수 |
| v2 | StarRocks 4.1 SQL 함수 |
식 레퍼런스가 출발점입니다. 문자열 연산, 날짜 계산, 조건부 논리, 형 변환, 집계를 다루며, 세대별 업스트림 원본 구문으로 연결되는 링크가 있습니다. 처음부터 끝까지 읽는 문서가 아니라 필요할 때마다 찾아보는 자료로 활용하십시오.
코드 정리는 식 셀도 정리합니다. 표준 Python 간격과 줄 바꿈을 적용하므로, 긴 조건식에 유용합니다.
4단계: 실행하기 전에 미리 보기
섹션 제목: “4단계: 실행하기 전에 미리 보기”단계가 의도대로 동작했는지 확인하려고 전체 워크플로를 실행할 필요는 없습니다. 데이터 미리 보기 패널은 Workflow Explorer 안에서 바로 단계의 출력(유형이 지정된 열과 처음 100개 행)을 보여 줍니다.
- 이 단계만 실행해 출력 테이블을 생성합니다. (한 번도 실행하지 않았다면 미리 보기에 “No data yet — run the step to generate this table.” 메시지가 표시됩니다.)
- 미리 보기를 엽니다. 단계를 선택하고 출력 데이터 미리 보기를 선택합니다. 단계의 오른쪽 클릭 메뉴에도 있습니다.
- 결과의 형태를 확인합니다. 선택한 열이 있는지, 조인으로
region이 들어왔는지,net_amount가 올바르게 계산되었는지, 행 수가 필터를 반영하는지 살펴봅니다.
패널이 열려 있는 동안 다른 단계를 선택하면 미리 보기가 해당 단계의 출력으로 바뀝니다. 단계 체인을 따라가며 각 단계에서 데이터의 형태가 어떻게 바뀌는지 확인하십시오. 처음 100개 행을 넘어서 보거나 데이터를 나누어 필터링하려면 테이블 탐색기에서 열기를 클릭하십시오. 자세한 내용은 단계 데이터 미리 보기를 참조하십시오.
일반화한 패턴
섹션 제목: “일반화한 패턴”앞의 모든 동작은 같은 기본 동작입니다.
하나 이상의 소스 테이블을 읽고, 형태를 바꾸고, 새 대상에 씁니다. SQL은 행과 테이블을 결정하고, 식은 각 열의 값을 결정하며, 미리 보기는 전체 실행을 확정하기 전에 결과를 확인해 줍니다. 이런 단계를 몇 개 연결하면 파이프라인이 됩니다. 각 단계의 대상이 다음 단계의 소스가 됩니다.
이후 단계나 대시보드에서 데이터를 구체화해 두어야 할 때는 중간 결과를 테이블에 쓰고, 읽을 때 계산해서 저장 공간을 절약하려면 뷰 에 쓰십시오. 뷰는 자체 데이터를 보유하지 않으며 소스가 바뀌면 자동으로 갱신됩니다.
변환이 SQL과 식만으로는 감당할 수 없을 정도로 커지면(맞춤 Python, 외부 패키지, 사용자 지정 논리 등) User Defined Transform 단계를 사용하십시오. 이는 일상적인 경우가 아니라 예외적인 경우입니다. 데이터 가공 작업의 대부분은 SQL과 식으로 처리할 수 있습니다.
다음 단계
섹션 제목: “다음 단계”- 식 레퍼런스 — 계산 열에 사용할 수 있는 모든 함수를 Lakehouse 세대별로 정리했습니다.
- 워크플로 단계 레퍼런스 — 변환, 가져오기, 내보내기 단계의 전체 목록입니다.
- 워크플로 가이드 — 단계 주변의 조건, 루프, 변수, 오류 처리를 다룹니다.
- 단계 데이터 미리 보기 — 패널을 자세히 설명합니다.
- 데이터 로드, 변환 및 게시 — 이 단계가 포함되는 전체 파이프라인입니다.