跳到主要内容
跳到主要内容

表函数

表函数是用于构造表的方法。

页面说明
azureBlobStorage提供类表格接口,用于在 Azure Blob Storage 中查询/插入文件。类似于 s3 函数。
azureBlobStorageCluster支持在指定集群内利用多个节点并行处理来自 Azure Blob Storage 的文件。
clusterAllReplicas允许在不创建分布式表的情况下访问集群中在 remote_servers 配置节中定义的所有分片。
deltaLake提供类似表的只读接口,用于访问 Amazon S3 中的 Delta Lake 表。
deltaLakeCluster这是对 deltaLake 表函数的扩展。
字典以 ClickHouse 表的形式显示字典数据。其工作方式与 Dictionary 引擎相同。
executableexecutable 表函数会基于你在脚本中定义的、将行输出到 stdout 的用户自定义函数(UDF)的输出创建一张表。
file一种表引擎,提供类似普通表的接口,可对文件执行 SELECT 和 INSERT 操作,其行为类似 s3 表函数。处理本地文件时使用 file(),处理对象存储(如 S3、GCS 或 MinIO)中的存储桶时使用 s3()
fileCluster在集群内的多个节点上同时处理与指定路径匹配的文件。发起节点与工作节点建立连接,对文件路径中的 glob 模式进行展开,并将文件读取任务分配给各个工作节点。每个工作节点都会向发起节点请求下一个要处理的文件,并重复该过程,直到所有任务完成(即所有文件都已读取)。
format根据指定的输入格式从参数中解析数据。若未指定 structure 参数,则从数据中提取其结构。
gcs提供类似表的接口,用于对 Google Cloud Storage 中的数据执行 SELECTINSERT 操作。需要 Storage Object User IAM 角色。
fuzzJSON对 JSON 字符串进行随机扰动。
fuzzQuery对给定的查询字符串进行随机扰动。
generateRandom根据给定的 schema 生成随机数据,可用于填充测试表。并非支持所有类型。
mergeTreeIndex表示 MergeTree 表中索引和 marks 文件的内容,可用于内部检查。
mergeTreeProjection表示 MergeTree 表中某个 PROJECTION 的内容。可用于内部检查。
hdfs基于 HDFS 上的文件创建一张表。该表函数与 urlfile 表函数类似。
hdfsCluster允许在指定集群的多个节点上并行处理 HDFS 文件。
hudi为 Amazon S3 中的 Apache Hudi 表提供类似表的只读接口。
ytsaurus该表函数可用于从 YTsaurus 集群读取数据。
hudiCluster 表函数hudi 表函数的扩展。可以在指定集群的多个节点上,并行处理存储在 Amazon S3 中的 Apache Hudi 表文件。
iceberg为存储在 Amazon S3、Azure、HDFS 或本地的 Apache Iceberg 表提供类似表的只读接口。
paimon提供一个只读的类表接口,用于访问存储在 Amazon S3、Azure、HDFS 或本地的 Apache Paimon 表。
icebergClustericeberg 表函数的扩展,允许在指定集群的多个节点上并行处理来自 Apache Iceberg 的文件。
paimonClusterpaimon 表函数的扩展,允许在指定集群内的多个节点上并行处理来自 Apache Paimon 的文件。
input一种表函数,用于将按给定结构发送到服务器的数据高效转换并插入到具有不同结构的表中。
jdbc返回一个通过 JDBC 驱动访问的表。
merge创建一个临时 Merge 表。其结构将通过对底层表的列取并集并推导公共类型来确定。
mongodb允许对存储在远程 MongoDB 服务器上的数据执行 SELECT 查询。
mysql允许对存储在远程 MySQL 服务器上的数据执行 SELECTINSERT 查询。
null使用 Null 表引擎创建具有指定结构的临时表。该函数用于便于编写测试和进行演示。
numbers返回仅包含一个 number 列的表,该列中包含可指定的整数值。
prometheusQuery使用 TimeSeries 表中的数据执行 Prometheus 查询。
prometheusQueryRange使用 TimeSeries 表中的数据执行 Prometheus 查询。
timeSeriesDatatimeSeriesData 返回表引擎为 TimeSeries 的表 db_name.time_series_table 所使用的数据表。
timeSeriesMetricstimeSeriesMetrics 返回表 db_name.time_series_table 所使用的 metrics 表,其表引擎为 TimeSeries 引擎。
timeSeriesSelector从 TimeSeries 表中读取时间序列数据,通过 selector 进行筛选,并限定时间戳位于指定的时间区间内。
timeSeriesTagstimeSeriesTags 表函数返回表 db_name.time_series_table 所使用的标签表,该表的表引擎为 TimeSeries。
zeros用于测试时,是生成大量行的最快方法。类似于 system.zerossystem.zeros_mt 系统表。
generate_series (generateSeries)返回一个仅包含 generate_series 列(UInt64)的表,该列包含从 start 到 stop(包括起始值和结束值)之间的整数。
odbc返回通过 ODBC 连接的表。
postgresql允许对存储在远程 PostgreSQL 服务器上的数据执行 SELECTINSERT 查询操作。
redis该表函数用于将 ClickHouse 与 Redis 集成。
remote, remoteSecure表函数 remote 允许动态访问远程服务器,即无需创建分布式表。表函数 remoteSecureremote 相同,但使用安全连接。
S3 表函数提供类表接口,用于在 Amazon S3 和 Google Cloud Storage 中查询和插入文件。此表函数类似于 hdfs 函数,但提供了 S3 特有的功能。
s3Clusters3 表函数的一个扩展,允许在指定集群中的多个节点上并行处理来自 Amazon S3 和 Google Cloud Storage 的文件。
sqlite允许对存储在 SQLite 数据库中的数据进行查询。
arrowFlight允许对由 Apache Arrow Flight 服务器暴露的数据执行查询。
url根据给定的 formatstructure,从指定的 URL 创建一张表
urlCluster允许在指定集群中的多个节点上并行处理来自 URL 的文件。
values创建一个临时存储,用于为各列填充值。
view将子查询转换为一张表。此函数用于实现视图。
loopClickHouse 中的 loop 表函数用于在无限循环中返回查询结果。

用法

表函数可以在 SELECT 查询的 FROM 子句中使用。比如,你可以使用 file 表函数从本地机器上的文件中查询数据。

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

你还可以使用表函数来创建仅在当前查询中可用的临时表。例如:

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 设置时,将无法使用表函数。