SAMPLE 절은 SELECT 쿼리를 근사 방식으로 처리할 수 있게 합니다.
데이터 샘플링이 활성화되면 쿼리는 전체 데이터가 아니라 데이터의 특정 비율(샘플)에 대해서만 수행됩니다. 예를 들어 전체 visits에 대한 통계를 계산해야 한다면, 전체 visits의 1/10에 대해서만 쿼리를 실행한 뒤 결과에 10을 곱해도 충분합니다.
근사 쿼리 처리는 다음과 같은 경우에 유용할 수 있습니다:
- 엄격한 지연 시간 요구 사항(예: 100ms 미만)이 있지만, 이를 충족하기 위한 추가 하드웨어 리소스 비용을 정당화하기 어려운 경우
- 원시 데이터 자체가 정확하지 않아, 근사값을 사용해도 품질이 눈에 띄게 저하되지 않는 경우
- 비즈니스 요구 사항상 근사 결과가 적합한 경우(예: 비용 효율성을 위해, 또는 정확한 결과를 프리미엄 사용자에게만 제공하기 위해)
샘플링은 MergeTree 계열의 테이블에서만 사용할 수 있으며, 테이블 생성 시 샘플링 표현식이 지정된 경우에만 사용할 수 있습니다(MergeTree 엔진 참고).
- 데이터 샘플링은 결정적 메커니즘입니다. 동일한
SELECT .. SAMPLE쿼리의 결과는 항상 같습니다. - 샘플링은 서로 다른 테이블에서도 일관되게 동작합니다. 단일 샘플링 키를 가진 테이블에서는 같은 계수를 사용하는 샘플이 항상 가능한 데이터 중 동일한 부분 집합을 선택합니다. 예를 들어 사용자 ID를 기준으로 샘플링하면, 서로 다른 테이블에서도 가능한 전체 사용자 ID 중 동일한 부분 집합에 해당하는 행이 선택됩니다. 즉, IN 절의 서브쿼리에서 샘플을 사용할 수 있습니다. 또한 JOIN 절로 샘플끼리 조인할 수도 있습니다.
- 샘플링을 사용하면 디스크에서 읽는 데이터 양을 줄일 수 있습니다. 단, 샘플링 키를 올바르게 지정해야 합니다. 자세한 내용은 Creating a MergeTree Table을 참고하십시오.
SAMPLE 절에서는 다음 구문을 지원합니다:
| SAMPLE 절 구문 | 설명 |
|---|---|
SAMPLE k | 여기서 k는 0에서 1 사이의 숫자입니다. 쿼리는 데이터의 k 비율에 대해 실행됩니다. 예를 들어 SAMPLE 0.1은 데이터의 10%에 대해 쿼리를 실행합니다. 더 보기 |
SAMPLE n | 여기서 n은 충분히 큰 정수입니다. 쿼리는 최소 n개의 행을 포함하는 샘플에 대해 실행됩니다(단, 이보다 크게 많지는 않음). 예를 들어 SAMPLE 10000000은 최소 10,000,000개의 행에 대해 쿼리를 실행합니다. 더 보기 |
SAMPLE k OFFSET m | 여기서 k와 m은 0에서 1 사이의 숫자입니다. 쿼리는 데이터의 k 비율에 해당하는 샘플에 대해 실행됩니다. 샘플에 사용되는 데이터는 m 비율만큼 오프셋됩니다. 더 보기 |
SAMPLE K
k는 0부터 1까지의 값이며(분수 표기와 소수 표기를 모두 지원함), 예를 들어 SAMPLE 1/2 또는 SAMPLE 0.5와 같습니다.
SAMPLE k 절에서는 데이터의 k 비율에 해당하는 부분에서 샘플을 추출합니다. 예시는 아래와 같습니다:
count() 값에 10을 수동으로 곱해야 합니다.
SAMPLE N
n은 충분히 큰 정수입니다. 예를 들어 SAMPLE 10000000입니다.
이 경우 쿼리는 최소 n개의 행을 포함하는 샘플에서 실행됩니다(단, 이보다 크게 초과하지는 않습니다). 예를 들어 SAMPLE 10000000은 최소 10,000,000개의 행을 대상으로 쿼리를 실행합니다.
데이터 읽기의 최소 단위는 그래뉼 하나이며(크기는 index_granularity 설정으로 지정됨), 샘플은 그래뉼 크기보다 훨씬 크게 설정하는 것이 좋습니다.
SAMPLE n 절을 사용하면 데이터 중 상대적으로 몇 퍼센트가 처리되었는지 알 수 없습니다. 따라서 집계 함수에 곱해야 할 계수도 알 수 없습니다. 근사 결과를 얻으려면 _sample_factor 가상 컬럼을 사용하십시오.
_sample_factor 컬럼에는 동적으로 계산되는 상대 계수가 들어 있습니다. 이 컬럼은 지정된 샘플링 키로 테이블을 생성할 때 자동으로 만들어집니다. _sample_factor 컬럼의 사용 예시는 아래에 나와 있습니다.
사이트 방문 통계를 담고 있는 visits 테이블을 살펴보겠습니다. 첫 번째 예시는 페이지 조회 수를 계산하는 방법을 보여줍니다:
SAMPLE K OFFSET M
k와 m은 0에서 1 사이의 숫자입니다. 아래에 예시를 보여줍니다.
예시 1
[++------------]
예시 2
[------++------]