Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

オープンテーブルフォーマットを直接クエリする

ClickHouse では、オブジェクトストレージ内のオープンテーブルフォーマットに保存されたデータを直接クエリできるテーブル関数を提供しています。外部カタログへの接続は不要で、AWS Athena が S3 から読み取るのと同様に、保存先のデータをそのままクエリできます。

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

以下の例では、各 lakehouse フォーマットで S3 に保存された hits データセットを使用します。各 lake フォーマットについて、オブジェクトストア provider ごとに専用の関数が用意されています。

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])

例:

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])

例:

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 テーブルエンジンのドキュメントを参照してください。

Navigation