본문으로 바로가기
본문으로 바로가기

테이블 함수(Table Functions)

테이블 함수(Table Functions)는 테이블을 생성하기 위한 메서드입니다.

페이지설명
azureBlobStorageAzure Blob Storage의 파일을 선택하여 삽입할 수 있게 해 주는, 테이블과 유사한 인터페이스를 제공합니다. s3 테이블 함수와 유사합니다.
azureBlobStorageCluster지정된 클러스터의 여러 노드에서 Azure Blob Storage의 파일을 병렬로 처리할 수 있도록 합니다.
clusterAllReplicas분산 테이블을 생성하지 않고도 클러스터의 모든 세그먼트(remote_servers 섹션에 설정된)에 접근할 수 있도록 합니다.
deltaLakeAmazon S3에 있는 Delta Lake 테이블에 대해 읽기 전용 테이블과 유사한 인터페이스를 제공합니다.
deltaLakeClusterdeltaLake 테이블 함수의 확장 기능입니다.
dictionary딕셔너리 데이터를 ClickHouse 테이블 형태로 노출합니다. Dictionary 엔진과 유사한 방식으로 동작합니다.
executableexecutable 테이블 함수는 행을 stdout으로 출력하는 스크립트에서 정의한 사용자 정의 함수(UDF)의 출력 결과를 기반으로 테이블을 생성합니다.
files3 테이블 함수와 유사하게, 파일에 대해 SELECTINSERT를 수행할 수 있는 테이블과 유사한 인터페이스를 제공하는 테이블 엔진입니다. 로컬 파일을 사용할 때는 file()을, S3, GCS, MinIO와 같은 객체 스토리지의 버킷을 사용할 때는 s3()를 사용합니다.
fileCluster지정된 경로와 일치하는 파일을 클러스터 내 여러 노드에서 동시에 처리할 수 있도록 합니다. 이니시에이터 노드가 워커 노드에 대한 연결을 설정하고, 파일 경로의 glob 패턴을 확장한 다음, 파일 읽기 작업을 워커 노드에 위임합니다. 각 워커 노드는 처리할 다음 파일을 요청하기 위해 이니시에이터 노드에 요청을 보내며, 모든 작업이 완료될 때까지(모든 파일이 읽힐 때까지) 이를 반복합니다.
format지정된 입력 포맷에 따라 인수의 데이터를 파싱합니다. structure 인수가 지정되지 않은 경우 데이터에서 구조를 추론합니다.
gcsGoogle Cloud Storage에서 데이터를 SELECTINSERT할 수 있는 테이블 형태의 인터페이스를 제공합니다. Storage Object User IAM 역할이 필요합니다.
fuzzJSONJSON 문자열에 무작위 변형을 가합니다.
fuzzQuery지정된 쿼리 문자열에 무작위 변형을 가합니다.
generateRandom주어진 스키마에 따라 랜덤 데이터를 생성합니다. 이 데이터를 사용하여 테스트 테이블을 채울 수 있습니다. 모든 타입이 지원되는 것은 아닙니다.
mergeTreeIndexMergeTree 테이블의 인덱스와 마크 파일의 내용을 표현합니다. 내부 구조를 분석하는 용도로 사용할 수 있습니다.
mergeTreeProjectionMergeTree 테이블의 특정 PROJECTION의 내용을 표현합니다. 내부 구조를 분석하는 용도로 사용할 수 있습니다.
hdfsHDFS의 파일로부터 테이블을 생성합니다. 이 테이블 함수는 urlfile 테이블 함수와 유사합니다.
hdfsCluster지정된 클러스터의 여러 노드에서 HDFS의 파일을 병렬로 처리할 수 있도록 합니다.
hudiAmazon S3에 있는 Apache Hudi 테이블에 대해 읽기 전용 테이블과 유사한 인터페이스를 제공합니다.
ytsaurusYTsaurus 클러스터에서 데이터를 읽을 수 있도록 하는 테이블 함수입니다.
hudiClusterhudi 테이블 함수의 확장입니다. 지정된 클러스터의 여러 노드에서 Amazon S3에 있는 Apache Hudi 테이블 파일을 병렬로 처리할 수 있습니다.
icebergAmazon S3, Azure, HDFS 또는 로컬에 저장된 Apache Iceberg 테이블에 대해 읽기 전용의 테이블과 유사한 인터페이스를 제공합니다.
paimonAmazon S3, Azure, HDFS 또는 로컬에 저장된 Apache Paimon 테이블에 대해 읽기 전용의 테이블과 유사한 인터페이스를 제공합니다.
icebergClustericeberg 테이블 함수의 확장으로, 지정된 클러스터의 여러 노드에서 Apache Iceberg 파일을 병렬로 처리할 수 있습니다.
paimonClusterpaimon 테이블 함수의 확장으로, 지정된 클러스터의 여러 노드에서 Apache Paimon 파일을 병렬로 처리할 수 있습니다.
input서버로 전송된 특정 구조의 데이터를 효율적으로 변환하여, 다른 구조의 테이블에 삽입할 수 있게 하는 테이블 함수입니다.
jdbcJDBC 드라이버를 통해 연결된 테이블을 반환합니다.
merge임시 Merge 테이블을 생성합니다. 구조는 하위 테이블들의 컬럼 합집합을 기반으로 하며, 공통 타입을 유도하여 결정됩니다.
mongodb원격 MongoDB 서버에 저장된 데이터에 대해 SELECT 쿼리를 실행할 수 있습니다.
mysql원격 MySQL 서버에 저장된 데이터에 대해 SELECTINSERT 쿼리를 실행할 수 있도록 합니다.
null지정한 구조를 가진 Null 테이블 엔진 기반의 임시 테이블을 생성합니다. 이 함수는 테스트 및 데모 작성을 쉽게 하기 위해 사용됩니다.
numbers정수 시퀀스를 담은 단일 number 컬럼을 가진 테이블을 반환합니다.
primes단일 prime 컬럼에 소수들이 담긴 테이블을 반환합니다.
prometheusQueryTimeSeries 테이블의 데이터를 사용하여 Prometheus 쿼리를 평가합니다.
prometheusQueryRangeTimeSeries 테이블의 데이터를 사용하여 Prometheus 쿼리를 평가합니다.
timeSeriesDatatimeSeriesData는 테이블 엔진이 TimeSeries인 db_name.time_series_table 테이블에서 사용하는 데이터 테이블을 반환합니다.
timeSeriesMetricstimeSeriesMetrics는 테이블 엔진이 TimeSeries인 db_name.time_series_table 테이블에서 사용되는 metrics 테이블을 반환합니다.
timeSeriesSelector지정된 구간의 타임스탬프와 셀렉터(selector)로 필터링하여 TimeSeries 테이블에서 시계열을 읽습니다.
timeSeriesTagstimeSeriesTags 테이블 함수는 TimeSeries 엔진을 사용하는 db_name.time_series_table 테이블이 사용하는 태그 테이블을 반환합니다.
zeros테스트용으로 많은 행을 가장 빠르게 생성하는 데 사용됩니다. system.zerossystem.zeros_mt 시스템 테이블과 유사합니다.
generate_series (generateSeries)start부터 stop까지의 정수(양 끝 값 포함)를 담고 있는 단일 generate_series 컬럼(UInt64)을 가진 테이블을 반환합니다.
odbcODBC를 통해 연결된 테이블을 반환합니다.
postgresql원격 PostgreSQL 서버에 저장된 데이터에 대해 SELECTINSERT 쿼리를 수행할 수 있습니다.
redis이 테이블 함수는 ClickHouse를 Redis와 통합할 수 있게 합니다.
remote, remoteSecure테이블 함수 remote를 사용하면 분산 테이블을 생성하지 않고도 실시간으로 원격 서버에 접근할 수 있습니다. 테이블 함수 remoteSecure는 보안 연결을 사용한다는 점만 제외하면 remote와 동일합니다.
s3 Table FunctionAmazon S3 및 Google Cloud Storage에 있는 파일을 선택(SELECT)/삽입(INSERT)하기 위한 테이블과 유사한 인터페이스를 제공합니다. 이 테이블 함수는 hdfs 함수와 유사하지만, S3 전용 기능을 제공합니다.
s3ClusterAmazon S3 및 Google Cloud Storage에 있는 파일을 지정된 클러스터의 여러 노드에서 병렬로 처리할 수 있게 하는 s3 테이블 함수의 확장입니다.
sqliteSQLite 데이터베이스에 저장된 데이터에 대해 쿼리를 실행할 수 있습니다.
arrowFlightApache Arrow Flight 서버를 통해 노출된 데이터에 대해 쿼리를 실행할 수 있습니다.
url지정한 formatstructure에 따라 URL의 데이터로부터 테이블을 생성합니다
urlCluster지정된 클러스터의 여러 노드에서 URL을 통해 접근 가능한 파일을 병렬로 처리할 수 있도록 합니다.
values값 목록으로 컬럼을 채우기 위한 임시 저장소를 생성합니다.
view서브쿼리를 테이블로 변환합니다. 이 함수는 뷰를 구현합니다.
loopClickHouse의 loop 테이블 함수는 쿼리 결과를 무한 루프로 반복해서 반환하는 데 사용됩니다.

사용법

테이블 함수는 SELECT 쿼리의 FROM 절에서 사용할 수 있습니다. 예를 들어 로컬 머신에 있는 파일에 대해 file 테이블 함수를 사용하여 데이터를 SELECT할 수 있습니다.

echo "1, 2, 3" > example.csv
./clickhouse client
:) SELECT * FROM file('example.csv')
┌─c1─┬─c2─┬─c3─┐
│  1 │  2 │  3 │
└────┴────┴────┘

테이블 함수(table function)를 사용하면 현재 쿼리에서만 사용할 수 있는 임시 테이블을 생성할 수도 있습니다. 예를 들어 다음과 같습니다.

SELECT * FROM generateSeries(1,5);
┌─generate_series─┐
│               1 │
│               2 │
│               3 │
│               4 │
│               5 │
└─────────────────┘

쿼리 실행이 완료되면 테이블이 삭제됩니다.

테이블 함수는 다음 구문을 사용하여 테이블을 생성하는 방법으로 사용할 수 있습니다:

CREATE TABLE [IF NOT EXISTS] [db.]table_name AS table_function()

예를 들어:

CREATE TABLE series AS generateSeries(1, 5);
SELECT * FROM series;
┌─generate_series─┐
│               1 │
│               2 │
│               3 │
│               4 │
│               5 │
└─────────────────┘

마지막으로, 테이블 함수는 INSERT 문을 사용해 데이터를 테이블에 삽입하는 데에도 사용할 수 있습니다. 예를 들어, 이전 예제에서 생성한 테이블의 내용을 다시 file 테이블 함수를 사용하여 디스크에 있는 파일로 기록할 수 있습니다.

INSERT INTO FUNCTION file('numbers.csv', 'CSV') SELECT * FROM series;
cat numbers.csv
1
2
3
4
5
참고

allow_ddl 설정이 비활성화되어 있으면 테이블 함수(table function)를 사용할 수 없습니다.