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

表函数

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

页面说明
azureBlobStorage提供类似表的接口,用于在 Azure Blob 存储中选择/插入文件,与 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)中的 bucket 时使用 s3()
fileCluster在集群中的多个节点上并行处理匹配指定路径的文件。发起节点会与工作节点建立连接,展开文件路径中的通配符,并将文件读取任务委派给工作节点。每个工作节点都会向发起节点请求下一个要处理的文件,如此反复,直到所有任务完成(即所有文件都被读取)。
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 表文件。
paimon为存储在 Amazon S3、Azure、HDFS 或本地的 Apache Paimon 表提供只读的类表接口。
iceberg为存储在 Amazon S3、Azure、HDFS 或本地的 Apache Iceberg 表提供只读的类表接口。
paimonClusterpaimon 表函数的扩展,允许在指定集群中的多个节点上并行处理来自 Apache Paimon 的文件。
icebergClustericeberg 表函数的扩展,允许在指定集群的多个节点上并行处理来自 Apache Iceberg 的文件。
input一种表函数,用于高效地将按给定结构发送到服务器的数据转换后插入到具有不同结构的表中。
jdbc返回一张通过 JDBC 驱动连接的表。
merge创建一个临时的 Merge 表。其结构将通过对底层表的列取并集,并推导出公共数据类型来确定。
mongodb允许对存储在远程 MongoDB 服务器中的数据执行 SELECT 查询。
mysql允许对存储在远程 MySQL 服务器上的数据执行 SELECTINSERT 查询。
null使用 Null 表引擎创建具有指定结构的临时表。该函数便于编写测试和演示示例。
numbers返回仅包含一个 number 列的表,该列存储可指定的整数。
prometheusQuery基于 TimeSeries 表中的数据评估 Prometheus 查询。
prometheusQueryRange基于 TimeSeries 表中的数据评估 Prometheus 查询。
timeSeriesDatatimeSeriesData 返回由表 db_name.time_series_table 使用的数据表,该表的表引擎为 TimeSeries。
timeSeriesMetricstimeSeriesMetrics 返回由表 db_name.time_series_table 使用的指标表,该表的表引擎为 TimeSeries 引擎。
timeSeriesSelector从 TimeSeries 表中读取时间序列数据,根据选择器进行过滤,时间戳落在指定时间区间内。
timeSeriesTagstimeSeriesTags 表函数返回表引擎为 TimeSeries 的表 db_name.time_series_table 所使用的标签表。
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 特有的功能。
s3Cluster是对 s3 表函数的扩展,用于在指定集群的多个节点上并行处理来自 Amazon S3 和 Google Cloud Storage 的文件。
sqlite允许对存储在 SQLite 数据库中的数据进行查询。
arrowFlight允许对 Apache Arrow Flight 服务器暴露的数据执行查询。
url从指定的 URL 根据给定的 formatstructure 创建一张表
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 设置时,将无法使用表函数。