동적 스키마 생성
ChainStream GraphQL 스키마는 시작 시 activecube-rs 가 Cube 정의를 컴파일해 완전히 타입이 지정된 async-graphql 스키마로 동적 생성합니다. 각 Cube는 OLAP 테이블에 대응하는 분석 데이터 모델이며, activecube-rs가 자동으로 다음을 만듭니다:- Cube용 최상위 Query 필드(해당 Chain Group 아래에 중첩)
- 선택 가능한 차원을 나타내는 Record 타입(
{Cube}Record) - 차원 계층과 맞는 Filter 입력(
{Cube}Filter) - 모든 차원 경로에 대한 ASC/DESC 변형을 가진 OrderBy enum(
{Cube}OrderBy)
스키마가 Cube 정의에서 생성되므로 Rust에 새 데이터 모델이 추가되면 배포 후 GraphQL 엔드포인트에 자동으로 반영됩니다.
루트 쿼리 구조
루트 쿼리 타입 이름은ChainStream 입니다. Cube는 세 가지 Chain Group 으로 묶이며, 각각 최상위 필드로 노출됩니다:
Mutation 이나 Subscription 타입은 없습니다 — GraphQL API는 읽기 전용 분석 쿼리입니다.
Chain Group
Cube는 대상 블록체인 생태계에 따라 세 그룹으로 나뉩니다:EVM 그룹은 어떤 체인을 조회할지 선택하려면
network 인자가 필요합니다. Solana 와 Trading 은 network 인자가 필요 없습니다 — Solana는 암시적이고, Trading은 데이터 안에 chain 차원이 있습니다.Chain Group 파라미터
모든 Chain Group은 데이터 소스 동작을 제어하는 선택 파라미터 두 가지를 받습니다:Dataset
dataset 파라미터는 조회하는 데이터의 시간 범위를 제어합니다:
Aggregates
aggregates 파라미터는 사전 집계(DWM/DWS) 테이블 사용 여부를 제어합니다:
공통 인자 패턴
Chain Group 안에서 모든 Cube 필드는 동일한 표준 인자 집합과, 선택적인 Cube별 selector 를 받습니다:LimitInput
count 는 Cube마다 다릅니다(보통 25). 대부분 Cube의 최대값은 10,000입니다.
Cube별 생성 타입
Cube마다 activecube-rs가 세 가지 동반 타입을 생성합니다:Record 타입
{Cube}Record — 선택 가능한 모든 차원과 메트릭을 담는 반환 타입. 필드 구조는 Cube의 차원 계층을 따릅니다.Filter 입력
{Cube}Filter — 각 차원이 필터 프리미티브(StringFilter, IntFilter, DateTimeFilter 등)에 매핑되는 중첩 입력 객체.OrderBy enum
{Cube}OrderBy — 모든 차원 경로에 대한 ASC/DESC enum 변형(예: Block_Time_ASC, Trade_Buy_Amount_DESC).Introspection
스키마는 표준 GraphQL introspection을 지원합니다.__schema 와 __type 쿼리로 타입·필드·인자를 탐색할 수 있습니다:
- 모든 Cube 나열
- Cube 타입 조사
- 필터 연산자 나열
다음 단계
데이터 Cube
25개 Cube의 필드, selector, 데이터 웨어하우스 레이어를 살펴봅니다.
Chain Groups
EVM, Solana, Trading Chain Group과 사용 가능한 Cube를 이해합니다.
Dataset & Aggregates
dataset 과 aggregates 로 데이터 범위와 사전 집계 동작을 제어합니다.필터링
where 필터와 selector 단축으로 쿼리를 좁히는 방법을 익힙니다.정렬 및 페이지네이션
orderBy 와 limit 으로 결과를 정렬하고 큰 데이터셋을 페이지 넘깁니다.메트릭 및 집계
쿼리에서
count, sum, avg, min, max, uniq 로 데이터를 집계합니다.
