Analytics Buckets 소개
Source: Dev.to

개요
Supabase는 Analytics Buckets를 도입합니다. 이를 통해 Supabase Storage에 방대한 데이터를 저장할 수 있습니다.
Postgres는 애플리케이션에 훌륭하지만, 분석 워크로드를 위해 설계된 것은 아닙니다.
Analytics Buckets는 Supabase 내에서 분석 워크로드를 위해 설계된 특수 스토리지 유형이며 Apache Iceberg 및 Amazon S3 위에 구축되었습니다. 컬럼형 Parquet 형식으로 데이터를 저장하며, 스캔, 집계 및 시계열 쿼리에 최적화되어 있습니다.
데이터의 콜드 스토리지에 쿼리 엔진이 붙어 있다고 생각하면 됩니다.
- 뜨거운 트랜잭션 데이터는 Postgres에 남아 있습니다.
- 과거 데이터와 분석 워크로드는 Analytics Buckets에 존재합니다.
- 익숙한 도구를 사용해 두 곳을 모두 쿼리할 수 있습니다.
그들은 무엇을 하나요?
Analytics Buckets는 다음을 제공합니다:
- 비용 효율적인 스토리지 – 데이터베이스 스토리지를 대신해 S3 가격 적용 (대규모 데이터셋의 스토리지 비용을 30‑90 % 절감한 사례가 문서화됨).
- 오픈 테이블 포맷 – Apache Iceberg를 사용하면 벤더 종속이 없으며, 호환 가능한 도구라면 어느 것이든 데이터를 쿼리할 수 있습니다.
- 스키마 진화 – 데이터를 다시 쓰지 않고도 테이블 스키마를 변경할 수 있습니다.
- 타임 트래블 – 데이터의 과거 스냅샷을 쿼리하여 특정 시점에 테이블이 어떻게 보였는지 확인할 수 있습니다.
- 전체 감사 히스토리 – 모든 변경 사항이 보존되어 언제, 무엇이, 어떻게 변경됐는지 추적할 수 있습니다.
Analytics Buckets와 Postgres를 언제 사용해야 할까
Analytics Buckets와 Postgres는 보완적인 관계이며, 서로 다른 워크로드에 사용됩니다.
Postgres에 데이터를 보관해야 할 경우
- 애플리케이션에 저지연 읽기가 필요할 때.
- 데이터가 자주 변경되고 일관성이 중요할 때.
- 데이터셋이 소규모에서 중간 규모일 때.
- 애플리케이션에서 실시간 접근이 필요할 때.
Analytics Buckets를 사용해야 할 경우
- 수백만~수십억 행을 저장할 때.
- 대용량 테이블을 스캔하는 무거운 분석 쿼리를 실행할 때.
- 저비용으로 장기 보관이 필요할 때.
- 여러 도구에서 데이터를 쿼리하고 싶을 때.
- 완전한 감사 이력 및 타임 트래블이 필요할 때.
많은 팀이 두 서비스를 모두 사용합니다. 최근 90일 데이터는 Postgres에 보관하고, 나머지는 Analytics Buckets에 아카이브한 뒤 필요할 때 히스토리 데이터를 쿼리합니다.
작동 방식
Analytics Buckets는 대규모 분석 데이터 세트를 위해 만든 오픈 테이블 포맷인 Apache Iceberg를 사용합니다. 내부적으로는:
- 데이터는 S3에 있는 Parquet 파일에 저장됩니다.
- Iceberg는 메타데이터(스키마, 파티션, 스냅샷)를 관리합니다.
- Iceberg REST 카탈로그가 쿼리를 위한 인터페이스를 제공합니다.
- Iceberg와 호환되는 도구라면 어떤 것이든 연결할 수 있습니다.
컴퓨팅과 스토리지를 분리하면 각각을 독립적으로 확장할 수 있습니다—페타바이트 규모의 데이터를 저장하고 필요한 부분만 쿼리합니다.
Analytics 버킷 만들기
대시보드 또는 SDK를 사용하여 Analytics 버킷을 만들 수 있습니다.
대시보드 사용
- Supabase 대시보드에서 Storage 로 이동합니다.
- Create Bucket 을 클릭합니다.
- 버킷 이름을 입력합니다.
- 버킷 유형으로 Analytics Bucket 을 선택합니다.
- Create 를 클릭합니다.
컬럼을 정의하고 데이터 타입(정밀도와 스케일을 포함한 decimal 같은 복합 타입) 을 설정할 수 있습니다. 외부 데이터 래퍼 스키마는 자동으로 구성됩니다. 테이블이 생성되면 Postgres 테이블을 관리하는 방식과 동일하게 Analytics 버킷을 관리합니다.
SDK 사용
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(
'https://your-project.supabase.co',
'your-service-key'
)
await supabase.storage.createBucket('my-analytics-bucket', {
type: 'ANALYTICS',
})
Analytics Buckets 연결
Analytics Buckets는 두 서비스에 대한 인증이 필요합니다:
- Iceberg REST Catalog – 테이블의 메타데이터(스키마, 파티션, 스냅샷)를 관리합니다.
- S3‑compatible storage – 실제 Parquet 데이터를 저장합니다.
카탈로그에는 Supabase 서비스 키를, 스토리지는 S3 자격 증명을 사용하여 인증합니다.
Supabase ETL로 스트리밍 데이터
Analytics Buckets는 **Supabase ETL**와 손잡고 작동합니다. ETL은 Postgres 데이터베이스에서 변경 사항을 캡처하여 거의 실시간으로 Analytics Buckets에 스트리밍합니다.
이를 통해 얻을 수 있는 이점:
- Postgres 테이블의 자동 복제.
- 분석 버킷에 거의 실시간 데이터 제공.
- 삽입, 업데이트, 삭제 모든 작업에 대한 완전한 체인지로그.
- 수동 데이터 이동이나 예약 작업이 필요 없음.
복제를 설정하려면 복제하려는 테이블에 대해 Postgres 퍼블리케이션을 생성한 뒤, 대시보드의 Replication 섹션에서 Analytics Buckets 목적지를 추가합니다.
Postgres에서 쿼리하기
Postgres에서 Foreign Data Wrappers를 사용하여 Analytics Buckets에 직접 쿼리할 수 있습니다. 이를 통해 Postgres의 실시간 데이터와 Analytics Buckets의 히스토리 데이터를 조인할 수 있습니다.
-- Create a foreign server for your Iceberg data
CREATE SERVER iceberg_server
FOREIGN DATA WRAPPER iceberg_wrapper
OPTIONS (
aws_access_key_id 'your-access-key',
aws_secret_access_key 'your-secret-key',
region_name 'us-east-1'
);
-- Import tables from your analytics bucket
IMPORT FOREIGN SCHEMA "analytics"
FROM SERVER iceberg_server
INTO iceberg;
-- Query historical data
SELECT *
FROM iceberg.events
WHERE event_timestamp > '2024-01-01';
Data tiering pattern
A common architecture is data tiering: keep recent data in Postgres and archive history to Analytics Buckets.
- Partition tables by time in Postgres, keeping a rolling window (e.g., the last 90 days).
- Stream all data to Analytics Buckets using Supabase ETL.
- Drop old partitions from Postgres.
- Query recent data from Postgres; query historical data from Analytics Buckets.
혜택
- Postgres 데이터베이스를 작고 빠르게 유지합니다.
- 스토리지 비용이 감소합니다.
- 분석 쿼리는 스캔에 최적화된 데이터에서 실행됩니다.
호환 가능한 도구
Analytics Buckets는 Iceberg REST Catalog API를 지원하는 모든 도구와 함께 사용할 수 있습니다:
- PyIceberg
- Apache Spark
- DuckDB
- Amazon Athena
- Trino
- Apache Flink
- Snowflake (외부 테이블을 통해)
- BigQuery (BigLake를 통해)
가격 및 가용성
Analytics Buckets는 Private Alpha 기간 동안 무료입니다. 지역 밖으로 데이터를 이동할 때는 표준 이그레스 요금이 적용됩니다.
액세스를 요청하려면 양식을 작성하십시오.
시작하기
- 프라이빗 알파에 대한 접근 권한을 요청하세요.
- 대시보드에서 분석 버킷을 생성하세요.
- PyIceberg, Spark 또는 원하는 도구를 사용해 연결하세요.
- Postgres에서 데이터를 자동으로 스트리밍하도록 ETL을 설정하세요.
트랜잭션 워크로드와 분석 워크로드를 분리하세요. Postgres를 빠르게 유지하세요. 히스토리를 S3 가격으로 저장하세요. 어떤 도구든지 쿼리할 수 있습니다.
여러분이 만드는 것을 기대하고 있습니다!