Skip to main content
ChainStream GraphQL에서 데이터를 필터링하는 방법은 두 가지입니다:
  1. Selector shortcutstokenAddress 같은 최상위 인자로, 흔한 필터를 간편히 쓰는 약칭
  2. where 인자 — 연산자 전 범위와 임의 차원 필터를 지원하는 중첩 필터 객체
권장: 항상 시간 필터를 넣으세요. DEXTrades, Transfers, BalanceUpdates 같은 DWD(상세) Cube에서 Block.Time 필터 없이 쿼리하면 매우 큰 테이블 파티션을 스캔할 수 있습니다. 스캔 범위를 제한하려면 항상 where: {Block: {Time: {after: "..."}}} 를 포함하고, OLAP 엔진의 메모리 한계를 피하세요.
같은 쿼리에서 둘을 함께 사용할 수 있습니다.

Selector shortcuts

Selector는 Cube 필드의 편의 인자로, 흔한 where 필터 패턴에 매핑됩니다. 단순 문자열이 아니라 where 필드와 동일한 필터 입력 타입(예: is, in, like 가 있는 StringFilter)을 받습니다. 아래 두 쿼리는 동일합니다:
Selector는 정확 일치만이 아니라 모든 필터 연산자를 지원합니다. 예: tokenAddress: {in: ["ADDR_1", "ADDR_2"]} 로 여러 토큰을 매칭하고, date: {after: "2025-01-01T00:00:00Z"} 로 시간을 필터할 수 있습니다.

where 인자

where 인자는 Cube의 차원 계층을 반영한 중첩 입력 객체를 받습니다. 각 리프 필드는 타입이 지정된 연산자를 가진 필터 프리미티브에 매핑됩니다.

구조

— 블록 시간이 특정 날짜 이후이고 매수 금액이 1000보다 큰 DEXTrades만 필터:
where 의 같은 레벨에 여러 필드를 지정하면 AND 로 결합됩니다.

필터 프리미티브 타입

모든 리프 차원은 다음 필터 입력 타입 중 하나에 매핑됩니다:

StringFilter

주소, 해시, 프로토콜 이름 등 텍스트 필드용.

IntFilter / FloatFilter

금액, 가격, 건수 등 숫자 필드용.

DateTimeFilter

타임스탬프 필드용. 값은 ISO 8601 문자열입니다.
after/before배타(엄격한 부등호)입니다. since/till포함입니다. between은 두 요소 배열이며 양끝 모두 포함입니다.

BoolFilter

불리언 필드용.

any 로 OR 논리

기본적으로 where 안의 조건은 모두 AND로 결합됩니다. OR를 쓰려면 any 배열 필드를 사용합니다 — 각 요소는 완전한 필터 객체이며, 하나라도 맞는 레코드가 반환됩니다.
any 는 다른 최상위 where 필드와 함께 쓸 수 있습니다. any 조건들은 OR로 묶이고, 그 결과가 형제 조건들과 AND로 결합됩니다.

기본 필터

일부 Cube는 기본 필터를 자동 적용합니다. where 절에서 명시적으로 설정하면 덮어쓸 수 있습니다. 의심(suspect) 거래를 포함하려면 필터를 명시하세요:
또는 whereIsSuspect 를 아예 넣지 않으면 기본값 false 가 그대로 적용됩니다. 의심 여부와 관계없이 모든 거래를 보려면 OR를 사용합니다:

Selector와 where 결합

Selector와 where 는 AND로 결합됩니다. 주요 엔티티는 Selector로, 추가 조건은 where 로 좁힐 수 있습니다:
이 쿼리는 Solana에서 매수 금액이 100을 넘는 USDC 거래 중 최근 50건을 시간 내림차순으로 가져옵니다.

다음 단계

정렬 및 페이지네이션

orderBylimit 으로 결과를 정렬하고 페이지를 넘깁니다.

메트릭 및 집계

count, sum, avg, min, max, uniq 로 필터된 데이터를 집계합니다.