跳到主要内容
跳到主要内容
编辑此页

fileCluster 表函数

允许在集群内跨多个节点同时处理与指定路径匹配的文件。发起者建立与工作节点的连接,扩展文件路径中的 glob 模式,并将文件读取任务委派给工作节点。每个工作节点都向发起者查询要处理的下一个文件,重复此过程直到所有任务完成(所有文件都已读取)。

注意

仅当与初始指定路径匹配的文件集在所有节点上都相同,并且它们的内容在不同节点之间保持一致时,此函数才能*正确*运行。
如果这些文件在节点之间存在差异,则无法预先确定返回值,并且返回值取决于工作节点从发起者请求任务的顺序。

语法

fileCluster(cluster_name, path[, format, structure, compression_method])

参数

  • cluster_name — 用于构建远程和本地服务器的地址和连接参数集的集群名称。
  • path — 从 user_files_path 到文件的相对路径。文件路径也支持 glob 模式
  • format — 文件的 格式。类型:字符串
  • structure'UserID UInt64, Name String' 格式的表结构。确定列名和类型。类型:字符串
  • compression_method — 压缩方法。支持的压缩类型包括 gzbrxzzstlz4bz2

返回值

一个具有指定格式和结构,以及来自与指定路径匹配的文件的数据的表。

示例

假设有一个名为 my_cluster 的集群,并给定以下 user_files_path 设置值

$ grep user_files_path /etc/clickhouse-server/config.xml
<user_files_path>/var/lib/clickhouse/user_files/</user_files_path>

另外,假设每个集群节点的 user_files_path 目录下都有文件 test1.csvtest2.csv,并且它们的内容在不同节点之间是相同的

$ cat /var/lib/clickhouse/user_files/test1.csv
1,"file1"
11,"file11"

$ cat /var/lib/clickhouse/user_files/test2.csv
2,"file2"
22,"file22"

例如,可以通过在每个集群节点上执行以下两个查询来创建这些文件

INSERT INTO TABLE FUNCTION file('file1.csv', 'CSV', 'i UInt32, s String') VALUES (1,'file1'), (11,'file11');
INSERT INTO TABLE FUNCTION file('file2.csv', 'CSV', 'i UInt32, s String') VALUES (2,'file2'), (22,'file22');

现在,通过 fileCluster 表函数读取 test1.csvtest2.csv 的数据内容

SELECT * FROM fileCluster('my_cluster', 'file{1,2}.csv', 'CSV', 'i UInt32, s String') ORDER BY i, s
┌──i─┬─s──────┐
│ 1 │ file1 │
│ 11 │ file11 │
└────┴────────┘
┌──i─┬─s──────┐
│ 2 │ file2 │
│ 22 │ file22 │
└────┴────────┘

路径中的 Glob 模式

File 表函数支持的所有模式,FileCluster 也都支持。

另请参阅