이 기능은 실험적 기능이며, 향후 릴리스에서 하위 호환되지 않는 방식으로 변경될 수 있습니다.
allow_experimental_time_series_table 설정을 사용하여
TimeSeries 테이블 엔진 사용을 활성화하십시오.
set allow_experimental_time_series_table = 1 명령을 입력하십시오.구문
SAMPLES 키워드에는 이전 버전과의 호환성을 위해 유지되는 DATA라는 별칭이 있습니다.사용법
TimeSeries 테이블은 컬럼 목록을 지정하지 않고도 생성할 수 있습니다):
외부 컬럼
예시:
metric_name은 비워 둘 수 있으며, 이는 메트릭 이름이 tags의 __name__에 지정된다는 의미입니다. 예시는 다음과 같습니다:
metric_family, type, unit, help 컬럼에 값을 삽입합니다:
외부 컬럼 지정
time_series 컬럼은 CREATE TABLE 문에서 명시적으로 나열해 기본 Array(Tuple(DateTime64(3), Float64)) 타입을 재정의할 수 있습니다. ClickHouse는 튜플에서 타임스탬프와 스칼라 타입을 추출해 내부 samples table에 반영합니다:
INNER COLUMNS 절에서 timestamp 및 value 컬럼의 타입을 직접 선언하는 것과 동일합니다:
CREATE TABLE 문에서 사용하는 경우, 선언된 타입이 일치해야 합니다.
대상 테이블
TimeSeries 테이블은 자체 데이터를 갖지 않으며, 모든 데이터는 대상 테이블에 저장됩니다.
이는 materialized view의 동작 방식과 비슷하지만,
materialized view는 대상 테이블이 하나인 반면
TimeSeries 테이블에는 samples, tags, 메트릭라는 세 개의 대상 테이블이 있습니다.
대상 테이블은 CREATE TABLE 쿼리에서 명시적으로 지정할 수도 있고
TimeSeries 테이블 엔진이 내부 대상 테이블을 자동으로 생성할 수도 있습니다.
TimeSeries 테이블에 삽입된 행은 변환되고 블록으로 분할된 후, 이 3개의 대상 테이블에 삽입됩니다.
대상 테이블은 다음과 같습니다:
Samples table
tags 테이블에는 메트릭 이름과 태그의 각 조합별로 계산된 식별자가 포함됩니다.
tags 테이블에는 다음 컬럼이 있어야 합니다:
Metrics 테이블
생성
TimeSeries 테이블 엔진으로 테이블을 생성하는 방법은 여러 가지가 있습니다.
가장 간단한 SQL 문은
SHOW CREATE TABLE my_table을 실행하면 이를 확인할 수 있습니다):
INNER COLUMNS 절에는 각 내부 대상 테이블의 자체 컬럼 정의도 3개 저장됩니다.
내부 대상 테이블의 이름은 .inner_id.samples.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,
.inner_id.tags.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, .inner_id.metrics.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
와 같으며, 각 대상 테이블에는 고유한 컬럼 집합이 있습니다:
기존 테이블을 AS로 지정해 테이블 생성하기
CREATE TABLE new_table AS existing_table 문은 existing_table에서 다음 항목을 복사합니다:
SETTINGS- 각 kind별
INNER COLUMNS - 각 kind별
INNER ENGINE
existing_table에 외부 대상이 있으면 이 문은 허용되지 않습니다.
외부 컬럼 목록은 복사되지 않으며 다시 생성됩니다.
컬럼 타입 조정
INNER COLUMNS 절을 사용하면 내부 대상 테이블의 컬럼 타입을 조정할 수 있습니다. 예를 들어, timestamp를 마이크로초 단위로 저장하고 값을 Float32로 저장하려면 다음과 같습니다:
id 컬럼
id 컬럼에는 식별자가 들어 있으며, 각 식별자는 메트릭 이름과 태그의 조합을 기준으로 계산됩니다.
식별자를 생성하는 데 사용되는 유형과 DEFAULT 표현식은 TAGS INNER COLUMNS 절을 통해 사용자 지정할 수 있습니다:
id 컬럼 유형은 UUID, UInt64, UInt128 또는 FixedString(16) 중 하나여야 합니다. DEFAULT 표현식이 지정되지 않으면 ClickHouse가 id 타입에 따라 이를 자동으로 선택합니다. samples 및 tags 내부 테이블에 선언된 id 타입은 서로 일치해야 합니다.
id_generator 설정을 사용하면 INNER COLUMNS 절을 사용하지 않고도 동일하게 사용자 지정할 수 있습니다:
DEFAULT에 다른 표현식이 있더라도 id를 생성하는 데 이 설정이 사용됩니다.
태그 맵을 포함하는 컬럼은 tags와 all_tags 두 개입니다. 이 예시에서는 두 컬럼이 같은 의미이지만, tags_to_columns 설정을 사용하면
서로 다를 수 있습니다. 이 설정을 사용하면 특정 태그를 tags 컬럼 내부의 맵에 저장하는 대신 별도의 컬럼에 저장하도록 지정할 수
있습니다:
instance 및 job 컬럼을 추가합니다.
이 경우 tags 컬럼에는 instance 및 job 태그가 포함되지 않지만,
all_tags 컬럼에는 포함됩니다. all_tags 컬럼은 일시적(임시)이며, 오직 id 컬럼의 DEFAULT 표현식에서
사용하기 위한 것입니다.
내부 대상 테이블의 테이블 엔진
- samples 테이블은 MergeTree를 사용합니다;
- tags 테이블은 AggregatingMergeTree를 사용합니다. 이 테이블에는 동일한 데이터가 여러 번 삽입되는 경우가 많으므로
중복을 제거할 방법이 필요하고,
min_time및max_time컬럼에 대해 집계를 수행해야 하기 때문입니다; - metrics 테이블은 ReplacingMergeTree를 사용합니다. 이 테이블에도 동일한 데이터가 여러 번 삽입되는 경우가 많으므로 중복을 제거할 방법이 필요하기 때문입니다.
외부 대상 테이블
TimeSeries 테이블에서 사용하게 할 수 있습니다:
id, timestamp, value, 그리고 tags_to_columns에 나열된 <tag_value_column>들)은 TimeSeries 테이블이 내부적으로 생성하는 타입과 일치해야 합니다(타입 제약 조건은 Samples table, Tags 테이블, Metrics 테이블을 참조하십시오). 타입 불일치는 CREATE 시점에 보고됩니다.
외부 Tags 대상의 id 생성기 표현식은 INSERT 시점에 다음 순서대로 결정됩니다: 먼저 id_generator 설정(설정된 경우), 다음으로 외부 테이블의 id 컬럼에 선언된 DEFAULT(있는 경우), 마지막으로 id 타입에서 파생된 표준 생성기입니다. 따라서 이 설정은 외부 테이블에 선언된 DEFAULT를 재정의합니다 — 자세한 내용은 The id column을 참조하십시오.
설정 변경
CREATE 이후에는 다음 2개의 설정을 변경할 수 있습니다:
id_generatorfilter_by_min_time_and_max_time
id_generator는 데이터가 이미 Tags 테이블에 있는 상태에서 변경하면 동일한 메트릭+태그 조합에 대해 서로 다른 ID가 생성될 수 있습니다. 기존 행은 이전 ID를 유지하고, 새 행은 새 생성기를 사용합니다.
다른 설정은 CREATE 시점에 내부 테이블의 스키마에 반영되므로 ALTER ... MODIFY SETTING으로는 변경할 수 없습니다.
설정
TimeSeries 테이블을 정의할 때 지정할 수 있는 설정 목록입니다.
함수
TimeSeries 테이블을 인수로 지원하는 함수 목록입니다.