직접 조회하기

직접 조회하기 (Querying directly)

오브젝트 스토리지에 있는 오픈 테이블 포맷의 데이터를 카탈로그 없이, 테이블 함수와 테이블 엔진으로 직접 조회하는 방법을 살펴봐요.

출처: 문서

본문

ClickHouse는 오브젝트 스토리지에 저장된 오픈 테이블 포맷의 데이터를 직접 조회하는 테이블 함수를 제공해요. 외부 카탈로그에 연결할 필요가 없어요. AWS Athena가 S3에서 읽는 것과 유사하게 데이터를 원위치에서 조회해요. 함수 호출에 스토리지 경로와 자격 증명을 직접 전달하면 ClickHouse가 나머지를 처리해요. 모든 ClickHouse SQL 구문과 함수를 사용할 수 있고, 쿼리는 ClickHouse의 병렬 실행과 효율적인 네이티브 Parquet 리더의 이점을 누려요.

서버, local 또는 chDB 이 가이드의 단계는 기존 ClickHouse 서버 설치에서 실행할 수 있어요. 임시 조회에는 clickhouse-local을 사용해 서버를 실행하지 않고 같은 워크플로를 완료할 수도 있어요. 약간의 조정만 하면 ClickHouse의 인프로세스 배포인 chDB로도 수행할 수 있어요.

다음 예시는 S3의 각 lakehouse 포맷에 저장된 hits 데이터셋을 사용해요. 각 레이크 포맷마다 오브젝트 스토어 제공자별로 전용 함수가 존재해요.

  • Apache Iceberg
  • Delta Lake
  • Apache Hudi
  • Apache Paimon

Apache Iceberg

iceberg 테이블 함수(icebergS3의 별칭)는 오브젝트 스토리지에서 Iceberg 테이블을 직접 읽어요. 각 스토리지 백엔드용 변형이 존재해요: icebergS3, icebergAzure, icebergHDFS, icebergLocal.

예시 구문:

icebergS3(url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,compression_method])
icebergAzure(connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])
icebergLocal(path_to_table, [,format] [,compression_method])

GCS 지원 함수의 S3 변형은 Google Cloud Storage(GCS)에도 사용할 수 있어요.

예시:

SELECT
    url,
    count() AS cnt
FROM icebergS3('https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/')
GROUP BY url
ORDER BY cnt DESC
LIMIT 5
┌─url────────────────────────────────────────────────┬─────cnt─┐
│ http://liver.ru/belgorod/page/1006.jки/доп_приборы │ 3288173 │ -- 3.29 million
│ http://kinopoisk.ru                                │ 1625250 │ -- 1.63 million
│ http://bdsm_po_yers=0&with_video                   │  791465 │
│ http://video.yandex                                │  582400 │
│ http://smeshariki.ru/region                        │  514984 │
└────────────────────────────────────────────────────┴─────────┘

5 rows in set. Elapsed: 3.375 sec. Processed 100.00 million rows, 9.98 GB (29.63 million rows/s., 2.96 GB/s.)
Peak memory usage: 10.48 GiB.

클러스터 변형

icebergS3Cluster 함수는 ClickHouse 클러스터의 여러 노드에 읽기를 분산해요. 이니시에이터 노드가 모든 노드에 연결을 설정하고 데이터 파일을 동적으로 디스패치해요. 각 워커 노드는 모든 파일을 읽을 때까지 태스크를 요청하고 처리해요. icebergClustericebergS3Cluster의 별칭이에요. Azure(icebergAzureCluster)와 HDFS(icebergHDFSCluster) 변형도 존재해요.

예시 구문:

icebergS3Cluster(cluster_name, url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,compression_method])
-- icebergCluster is an alias for icebergS3Cluster
icebergAzureCluster(cluster_name, connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])

예시 (ClickHouse Cloud):

SELECT
    url,
    count() AS cnt
FROM icebergS3Cluster(
    'default',
    'https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/'
)
GROUP BY url
ORDER BY cnt DESC
LIMIT 5

테이블 엔진

매번 쿼리마다 테이블 함수를 사용하는 대신, Iceberg 테이블 엔진으로 영구 테이블을 만들 수 있어요. 데이터는 여전히 오브젝트 스토리지에 있고 요청 시 읽혀요 — 데이터가 ClickHouse로 복사되지 않아요. 장점은 테이블 정의가 ClickHouse에 저장되고 각 사용자가 스토리지 경로와 자격 증명을 지정하지 않아도 사용자와 세션 간에 공유할 수 있다는 거예요. 각 스토리지 백엔드용 엔진 변형이 존재해요: IcebergS3(또는 Iceberg 별칭), IcebergAzure, IcebergHDFS, IcebergLocal.

테이블 엔진과 테이블 함수 모두 데이터 캐싱을 지원해요. S3, AzureBlobStorage, HDFS 스토리지 엔진과 동일한 캐싱 메커니즘을 사용해요. 또한 메타데이터 캐시는 매니페스트 파일 정보를 메모리에 저장해서 Iceberg 메타데이터의 반복 읽기를 줄여줘요. 이 캐시는 use_iceberg_metadata_files_cache 설정으로 기본 활성화돼요.

예시 구문: 테이블 엔진 IcebergIcebergS3의 별칭이에요.

CREATE TABLE iceberg_table
    ENGINE = IcebergS3(url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,compression_method])
CREATE TABLE iceberg_table
    ENGINE = IcebergAzure(connection_string|storage_account_url, container_name, blobpath, [account_name, account_key, format, compression])
CREATE TABLE iceberg_table
    ENGINE = IcebergLocal(path_to_table, [,format] [,compression_method])

GCS 지원 테이블 엔진의 S3 변형은 Google Cloud Storage(GCS)에도 사용할 수 있어요.

예시:

CREATE TABLE hits_iceberg
    ENGINE = IcebergS3('https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/')
SELECT
    url,
    count() AS cnt
FROM hits_iceberg
GROUP BY url
ORDER BY cnt DESC
LIMIT 5
┌─url────────────────────────────────────────────────┬─────cnt─┐
│ http://liver.ru/belgorod/page/1006.jки/доп_приборы │ 3288173 │
│ http://kinopoisk.ru                                │ 1625250 │
│ http://bdsm_po_yers=0&with_video                   │  791465 │
│ http://video.yandex                                │  582400 │
│ http://smeshariki.ru/region                        │  514984 │
└────────────────────────────────────────────────────┴─────────┘

5 rows in set. Elapsed: 2.737 sec. Processed 100.00 million rows, 9.98 GB (36.53 million rows/s., 3.64 GB/s.)
Peak memory usage: 10.53 GiB.

파티션 프루닝, 스키마 진화, 타임 트래블, 캐싱 등을 포함한 지원 기능은 지원 매트릭스를 참고하세요. 전체 참조는 iceberg 테이블 함수Iceberg 테이블 엔진 문서를 확인해 주세요.

Delta Lake

deltaLake 테이블 함수(deltaLakeS3의 별칭)는 오브젝트 스토리지에서 Delta Lake 테이블을 읽어요. 다른 백엔드용 변형이 존재해요: deltaLakeAzuredeltaLakeLocal.

예시 구문:

deltaLakeS3(url [,aws_access_key_id, aws_secret_access_key] [,format] [,structure] [,compression])
deltaLakeAzure(connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])
deltaLakeLocal(path, [,format])

GCS 지원 함수의 S3 변형은 Google Cloud Storage(GCS)에도 사용할 수 있어요.

예시:

SELECT
    URL,
    count() AS cnt
FROM deltaLake('https://datasets-documentation.s3.amazonaws.com/lake_formats/delta_lake/')
GROUP BY URL
ORDER BY cnt DESC
LIMIT 5
┌─URL────────────────────────────────────────────────┬─────cnt─┐
│ http://liver.ru/belgorod/page/1006.jки/доп_приборы │ 3288173 │ -- 3.29 million
│ http://kinopoisk.ru                                │ 1625250 │ -- 1.63 million
│ http://bdsm_po_yers=0&with_video                   │  791465 │
│ http://video.yandex                                │  582400 │
│ http://smeshariki.ru/region                        │  514984 │
└────────────────────────────────────────────────────┴─────────┘

5 rows in set. Elapsed: 3.878 sec. Processed 100.00 million rows, 14.82 GB (25.78 million rows/s., 3.82 GB/s.)
Peak memory usage: 9.16 GiB.

클러스터 변형

deltaLakeCluster 함수는 ClickHouse 클러스터의 여러 노드에 읽기를 분산해요. 이니시에이터 노드가 데이터 파일을 워커 노드에 동적으로 디스패치해 병렬 처리해요. deltaLakeS3ClusterdeltaLakeCluster의 별칭이에요. Azure 변형(deltaLakeAzureCluster)도 사용 가능해요.

예시 구문:

deltaLakeCluster(cluster_name, url [,aws_access_key_id, aws_secret_access_key] [,format] [,structure] [,compression])
-- deltaLakeS3Cluster is an alias for deltaLakeCluster
deltaLakeAzureCluster(cluster_name, connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])

GCS 지원 함수의 S3 변형은 Google Cloud Storage(GCS)에도 사용할 수 있어요.

예시 (ClickHouse Cloud):

SELECT
    URL,
    count() AS cnt
FROM deltaLakeCluster(
    'default',
    'https://datasets-documentation.s3.amazonaws.com/lake_formats/delta_lake/'
)
GROUP BY URL
ORDER BY cnt DESC
LIMIT 5

테이블 엔진

매번 쿼리마다 테이블 함수를 사용하는 대신, S3 호환 스토리지를 사용한다면 DeltaLake 테이블 엔진으로 영구 테이블을 만들 수 있어요. 데이터는 여전히 오브젝트 스토리지에 있고 요청 시 읽혀요 — 데이터가 ClickHouse로 복사되지 않아요. 장점은 테이블 정의가 ClickHouse에 저장되고 각 사용자가 스토리지 경로와 자격 증명을 지정하지 않아도 사용자와 세션 간에 공유할 수 있다는 거예요.

테이블 엔진과 테이블 함수 모두 데이터 캐싱을 지원해요. S3, AzureBlobStorage, HDFS 스토리지 엔진과 동일한 캐싱 메커니즘을 사용해요.

예시 구문:

CREATE TABLE delta_table
    ENGINE = DeltaLake(url [,aws_access_key_id, aws_secret_access_key])

GCS 지원 이 테이블 엔진은 Google Cloud Storage(GCS)에도 사용할 수 있어요.

예시:

CREATE TABLE hits_delta
    ENGINE = DeltaLake('https://datasets-documentation.s3.amazonaws.com/lake_formats/delta_lake/')
SELECT
    URL,
    count() AS cnt
FROM hits_delta
GROUP BY URL
ORDER BY cnt DESC
LIMIT 5
┌─URL────────────────────────────────────────────────┬─────cnt─┐
│ http://liver.ru/belgorod/page/1006.jки/доп_приборы │ 3288173 │
│ http://kinopoisk.ru                                │ 1625250 │
│ http://bdsm_po_yers=0&with_video                   │  791465 │
│ http://video.yandex                                │  582400 │
│ http://smeshariki.ru/region                        │  514984 │
└────────────────────────────────────────────────────┴─────────┘

5 rows in set. Elapsed: 3.608 sec. Processed 100.00 million rows, 14.82 GB (27.72 million rows/s., 4.11 GB/s.)
Peak memory usage: 9.27 GiB.

스토리지 백엔드, 캐싱 등을 포함한 지원 기능은 지원 매트릭스를 참고하세요. 전체 참조는 deltaLake 테이블 함수DeltaLake 테이블 엔진 문서를 확인해 주세요.

Apache Hudi

hudi 테이블 함수는 S3에서 Hudi 테이블을 읽어요.

구문:

hudi(url [,aws_access_key_id, aws_secret_access_key] [,format] [,structure] [,compression])

클러스터 변형

hudiCluster 함수는 ClickHouse 클러스터의 여러 노드에 읽기를 분산해요. 이니시에이터 노드가 데이터 파일을 워커 노드에 동적으로 디스패치해 병렬 처리해요.

hudiCluster(cluster_name, url [,aws_access_key_id, aws_secret_access_key] [,format] [,structure] [,compression])

테이블 엔진

매번 쿼리마다 테이블 함수를 사용하는 대신, Hudi 테이블 엔진으로 영구 테이블을 만들 수 있어요. 데이터는 여전히 오브젝트 스토리지에 있고 요청 시 읽혀요 — 데이터가 ClickHouse로 복사되지 않아요. 장점은 테이블 정의가 ClickHouse에 저장되고 각 사용자가 스토리지 경로와 자격 증명을 지정하지 않아도 사용자와 세션 간에 공유할 수 있다는 거예요.

구문:

CREATE TABLE hudi_table
    ENGINE = Hudi(url [,aws_access_key_id, aws_secret_access_key])

스토리지 백엔드 등을 포함한 지원 기능은 지원 매트릭스를 참고하세요. 전체 참조는 hudi 테이블 함수Hudi 테이블 엔진 문서를 확인해 주세요.

Apache Paimon

paimon 테이블 함수(paimonS3의 별칭)는 오브젝트 스토리지에서 Paimon 테이블을 읽어요. 각 스토리지 백엔드용 변형이 존재해요: paimonS3, paimonAzure, paimonHDFS, paimonLocal.

구문:

paimon(url [,access_key_id, secret_access_key] [,format] [,structure] [,compression])
paimonS3(url [,access_key_id, secret_access_key] [,format] [,structure] [,compression])
paimonAzure(connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])
paimonHDFS(path_to_table, [,format] [,compression_method])
paimonLocal(path_to_table, [,format] [,compression_method])

클러스터 변형

paimonS3Cluster 함수는 ClickHouse 클러스터의 여러 노드에 읽기를 분산해요. 이니시에이터 노드가 데이터 파일을 워커 노드에 동적으로 디스패치해 병렬 처리해요. paimonClusterpaimonS3Cluster의 별칭이에요. Azure(paimonAzureCluster)와 HDFS(paimonHDFSCluster) 변형도 존재해요.

paimonS3Cluster(cluster_name, url [,access_key_id, secret_access_key] [,format] [,structure] [,compression])
-- paimonCluster is an alias for paimonS3Cluster
paimonAzureCluster(cluster_name, connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])
paimonHDFSCluster(cluster_name, path_to_table, [,format] [,compression_method])

테이블 엔진

ClickHouse는 실험적인 PaimonS3, PaimonAzure, PaimonHDFS, PaimonLocal 테이블 엔진을 제공해요. allow_experimental_paimon_storage_engine = 1로 활성화해요.

스토리지 백엔드 등을 포함한 지원 기능은 지원 매트릭스를 참고하세요. 전체 참조는 paimon 테이블 함수 문서를 확인해 주세요.

더 알아보기 (Learn more)