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

hdfsCluster 表函数

允许在指定集群的多个节点上并行处理来自 HDFS 的文件。在发起节点上,它会与集群中所有节点建立连接,展开 HDFS 文件路径中的星号通配符,并动态分派每个文件。在工作节点上,它会向发起节点请求下一个要处理的任务并对其进行处理。该过程会重复进行,直到所有任务都完成。

语法

hdfsCluster(cluster_name, URI, format, structure)

参数

ArgumentDescription
cluster_name用于构建到远程和本地服务器的一组地址和连接参数的集群名称。
URI指向单个文件或一组文件的 URI。只读模式下支持以下通配符:***?{'abc','def'}{N..M},其中 NM 为数字,abcdef 为字符串。更多信息参见 路径中的通配符
format文件的格式
structure表的结构。格式为 'column1_name column1_type, column2_name column2_type, ...'

返回值

具有指定结构的表,用于从指定文件中读取数据。

示例

  1. 假设我们有一个名为 cluster_simple 的 ClickHouse 集群,并且在 HDFS 上有若干文件,其 URI 如下:
  • 'hdfs://hdfs1:9000/some_dir/some_file_1'
  • 'hdfs://hdfs1:9000/some_dir/some_file_2'
  • 'hdfs://hdfs1:9000/some_dir/some_file_3'
  • 'hdfs://hdfs1:9000/another_dir/some_file_1'
  • 'hdfs://hdfs1:9000/another_dir/some_file_2'
  • 'hdfs://hdfs1:9000/another_dir/some_file_3'
  1. 查询这些文件中的行数:
SELECT count(*)
FROM hdfsCluster('cluster_simple', 'hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32')
  1. 查询这两个目录中所有文件的总行数:
SELECT count(*)
FROM hdfsCluster('cluster_simple', 'hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV', 'name String, value UInt32')
注意

如果文件列表中包含带前导零的数字范围,请分别为每一位数字使用花括号语法,或使用 ?