문서 메뉴

빠른 시작#

이 페이지를 마치면 레이크로 동기화되는 소스, 실제 데이터를 조회하는 쿼리, 4시간마다 자동으로 다시 빌드되는 모델을 갖게 됩니다. 예제는 Stripe와 HubSpot을 사용하는 가상의 화물 운송 소프트웨어 회사 Skycrane을 사용합니다. 진행하면서 자신의 수치로 바꿔보세요.

1. 소스 연결#

을 열고 앱 연결을 선택합니다. 원하는 소스를 고릅니다. Skycrane의 예제에서는 Stripe를 사용합니다. 각 소스는 필요한 정보만 요청합니다. Stripe는 제한된 API 키 1개만 필요하며, Stripe 대시보드에서 1분 안에 읽기 전용으로 만들 수 있습니다. 따라서 키가 유출되어도 계정의 데이터를 변경할 수 없습니다. 자격 증명 설정은 각 소스 페이지에서 설명합니다. 이 가이드는 Stripe를 사용합니다.

키를 저장하면 첫 동기화가 자동으로 시작됩니다.

2. 데이터 수집 확인#

동기화 기록 탭은 동기화 진행 상황을 테이블별로 보여줍니다. 완료되면 모든 테이블은 소스 이름을 딴 스키마 아래 레이크에 저장됩니다.

text
titan.stripe.charges
titan.stripe.customers
titan.stripe.subscriptions
titan.stripe.invoices

이후 소스는 4시간마다 다시 동기화됩니다. 변경된 내용만 가져오고, 소스에서 삭제된 행은 알리지 않고 제거하는 대신 표시합니다. 곧 살펴볼 _deleted 열이 이를 나타냅니다. 테이블 탭에서 동기화할 테이블과 열을 정확히 지정할 수 있습니다. 기본적으로 모든 항목이 켜져 있습니다.

3. 첫 쿼리 실행#

쿼리를 열고 재무 대시보드에서 가장 먼저 묻는 질문을 해봅니다.

sql
select
  date_trunc('month', created_at) as month,
  round(sum(amount) / 100.0, 2) as gross_volume
from titan.stripe.charges
where not _deleted
group by month
order by month desc
limit 4
output
month       gross_volume
2026-08-01     291441.00
2026-07-01     338129.50
2026-06-01     331624.00
2026-05-01     319887.25

레이크의 모든 테이블에 적용되는 다음 2가지를 확인하세요.

  • Stripe는 amount를 최소 통화 단위인 센트로 저장하므로 100으로 나눕니다. 이런 특성은 각 커넥터 페이지에 설명되어 있습니다.

  • where not _deleted는 Stripe에서 삭제된 행을 제외합니다. 레이크는 행에 표시를 남기고 유지하므로 이력이 알리지 않고 줄어들지 않습니다. 레이크에서 시스템 열을 설명합니다.

서로 다른 소스를 조인하는 것도 하나의 소스 안에서 조인하는 것만큼 간단합니다. Skycrane의 진행 중인 영업 파이프라인과 청구 데이터를 join 한 번으로 나란히 볼 수 있습니다.

sql
select
  property_dealstage as stage,
  count(*) as deals,
  round(sum(property_amount)) as pipeline_value
from titan.hubspot.deals
where not _deleted and not property_hs_is_closed
group by stage
order by pipeline_value desc
output
stage                    deals  pipeline_value
contractsent                 7        412000.0
decisionmakerboughtin       11        280500.0
qualifiedtobuy              19        224000.0
presentationscheduled        9        118750.0

4. 모델로 만들기#

내일도 사용할 쿼리는 모델에 저장하세요. 모델은 파일에 담긴 select 문이며, Supernova가 결과를 테이블로 구체화해 유지합니다. 파일을 열거나 git으로 데이터 저장소를 복제한 뒤 models/monthly_revenue.sql을 만듭니다.

sql
-- name: Monthly revenue
select
  date_trunc('month', created_at) as month,
  round(sum(amount) / 100.0, 2) as gross_volume,
  round(sum(amount_refunded) / 100.0, 2) as refunded
from titan.stripe.charges
where not _deleted
group by month

이것이 전부입니다. 기본 파일 이름이 테이블 이름이 되고, 모델은 4시간마다 종속성 순서로 다시 빌드됩니다. 모델은 다른 모델을 select from으로 읽을 수 있으며, Supernova가 SQL 자체에서 순서를 파악합니다. 다른 테이블처럼 쿼리하세요.

sql
select * from titan.models.monthly_revenue order by month desc

모델 작성에서는 출력 스키마, 키 기반 증분 업데이트, 수동 실행 주기, 타입 검사를 지정하는 헤더 지시문을 설명합니다.

다음 단계#

  • 레이크: 테이블, 삭제, 스냅샷이 실제로 동작하는 방식입니다. 10분이면 나머지 내용을 이해할 토대를 만들 수 있습니다.

  • 타입 어노테이션: 필요한 SQL에만 타입을 추가합니다. 검사기가 대시보드에 영향이 나타나기 전에 스키마 변화를 감지합니다.

  • 제한: 모든 상한을 한 표에서 정확히 확인합니다.