メインコンテンツへスキップ
メインコンテンツへスキップ

オープンテーブル形式を直接クエリする

ClickHouse には、オブジェクトストレージ内のオープンテーブル形式で保存されたデータを直接クエリするためのテーブル関数が用意されています。外部カタログに接続する必要はなく、AWS Athena が S3 からデータを読み取るのと同様に、その場でデータをクエリします。

関数呼び出しでストレージパスと認証情報を直接指定すれば、残りの処理は ClickHouse が担います。ClickHouse のすべての SQL 構文と関数を利用でき、クエリでは ClickHouse の並列実行と効率的なネイティブ Parquet リーダーの利点を活用できます。

サーバー、local、または chDB

このガイドの手順は、既存の ClickHouse サーバー環境を使用して実行できます。アドホックなクエリには、代わりに clickhouse-local を使用し、サーバーを起動せずに同じワークフローを実行することもできます。少し調整すれば、ClickHouse のインプロセス実装である chDB を使用して同じ処理を行うことも可能です。

以下の例では、各レイクハウス形式で S3 に保存された hits データセットを使用します。各レイク形式について、オブジェクトストアプロバイダーごとの専用関数が用意されています。

iceberg テーブル関数 (icebergS3 のエイリアス) は、オブジェクトストレージから直接 Iceberg テーブルを読み取ります。各ストレージバックエンドに対応するバリアントとして、icebergS3icebergAzureicebergHDFSicebergLocal があります。

構文例:

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 エイリアス) 、IcebergAzureIcebergHDFSIcebergLocal

テーブルエンジンとテーブル関数はいずれもデータキャッシュをサポートしており、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 テーブルエンジンのドキュメントを参照してください。