Querying open table formats directly

The [`deltaLake`](/docs/sql-reference/table-functions/deltalake) table function (alias for `deltaLakeS3`) reads Delta Lake tables from object storage. Variants exist for other backends: `deltaLakeAzure` and `deltaLakeLocal`.

**Example syntax:**

```
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 support

The S3 variant of the functions can be used for Google Cloud Storage (GCS).

**Example:**

```
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.
```

### Cluster variant[​](#delta-cluster-variant "Direct link to Cluster variant")

The [`deltaLakeCluster`](/docs/sql-reference/table-functions/deltalakeCluster) function distributes reads across multiple nodes in a ClickHouse cluster. The initiator node dispatches data files dynamically to worker nodes for parallel processing. `deltaLakeS3Cluster` is an alias for `deltaLakeCluster`. An Azure variant ([`deltaLakeAzureCluster`](/docs/sql-reference/table-functions/deltalakeCluster)) is also available.

**Example syntax:**

```
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 support

The S3 variant of the functions can be used for Google Cloud Storage (GCS).

**Example (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
```

### Table engine[​](#delta-table-engine "Direct link to Table engine")

As an alternative to using the table function in every query, you can create a persistent table using the [`DeltaLake` table engine](/docs/engines/table-engines/integrations/deltalake) if using S3 compatible storage. The data still resides in object storage and is read on demand - no data is copied into ClickHouse. The advantage is that the table definition is stored in ClickHouse and can be shared across users and sessions without each user needing to specify the storage path and credentials.

Both the table engine and the table function support [data caching](/docs/engines/table-engines/integrations/deltalake#data-cache), using the same caching mechanism as the S3, AzureBlobStorage, and HDFS storage engines.

**Example syntax:**

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

GCS support

This table engine can be used for Google Cloud Storage (GCS).

**Example:**

```
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.
```

For supported features including storage backends, caching, and more, see the [support matrix](/docs/use-cases/data-lake/support-matrix#format-support). For full reference, see the [`deltaLake` table function](/docs/sql-reference/table-functions/deltalake) and [`DeltaLake` table engine](/docs/engines/table-engines/integrations/deltalake) documentation.

The [`hudi`](/docs/sql-reference/table-functions/hudi) table function reads Hudi tables from S3.

**Syntax:**

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

### Cluster variant[​](#hudi-cluster-variant "Direct link to Cluster variant")

The [`hudiCluster`](/docs/sql-reference/table-functions/hudiCluster) function distributes reads across multiple nodes in a ClickHouse cluster. The initiator node dispatches data files dynamically to worker nodes for parallel processing.

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

### Table engine[​](#hudi-table-engine "Direct link to Table engine")

As an alternative to using the table function in every query, you can create a persistent table using the [`Hudi` table engine](/docs/engines/table-engines/integrations/hudi). The data still resides in object storage and is read on demand - no data is copied into ClickHouse. The advantage is that the table definition is stored in ClickHouse and can be shared across users and sessions without each user needing to specify the storage path and credentials.

**Syntax:**

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

For supported features including storage backends and more, see the [support matrix](/docs/use-cases/data-lake/support-matrix#format-support). For full reference, see the [`hudi` table function](/docs/sql-reference/table-functions/hudi) and [`Hudi` table engine](/docs/engines/table-engines/integrations/hudi) documentation.

Experimental feature. [Learn more.](/docs/beta-and-experimental-features#experimental-features)

The [`paimon`](/docs/sql-reference/table-functions/paimon) table function (alias for `paimonS3`) reads Paimon tables from object storage. Variants exist for each storage backend: `paimonS3`, `paimonAzure`, `paimonHDFS`, and `paimonLocal`.

**Syntax:**

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

### Cluster variant[​](#paimon-cluster-variant "Direct link to Cluster variant")

The [`paimonS3Cluster`](/docs/sql-reference/table-functions/paimonCluster) function distributes reads across multiple nodes in a ClickHouse cluster. The initiator node dispatches data files dynamically to worker nodes for parallel processing. `paimonCluster` is an alias for `paimonS3Cluster`. Variants also exist for Azure ([`paimonAzureCluster`](/docs/sql-reference/table-functions/paimonCluster)) and HDFS ([`paimonHDFSCluster`](/docs/sql-reference/table-functions/paimonCluster)).

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