mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-19 12:52:37 +00:00
3.9 KiB
3.9 KiB
machine_translated | machine_translated_rev | toc_priority | toc_title |
---|---|---|---|
true | 72537a2d52 |
36 | HDFS |
HDFS
该引擎提供了集成 Apache Hadoop 生态系统通过允许管理数据 HDFS通过ClickHouse. 这个引擎是相似的 到 文件 和 URL 引擎,但提供Hadoop特定的功能。
用途
ENGINE = HDFS(URI, format)
该 URI
参数是HDFS中的整个文件URI。
该 format
参数指定一种可用的文件格式。 执行
SELECT
查询时,格式必须支持输入,并执行
INSERT
queries – for output. The available formats are listed in the
格式 科。
路径部分 URI
可能包含水珠。 在这种情况下,表将是只读的。
示例:
1. 设置 hdfs_engine_table
表:
CREATE TABLE hdfs_engine_table (name String, value UInt32) ENGINE=HDFS('hdfs://hdfs1:9000/other_storage', 'TSV')
2. 填充文件:
INSERT INTO hdfs_engine_table VALUES ('one', 1), ('two', 2), ('three', 3)
3. 查询数据:
SELECT * FROM hdfs_engine_table LIMIT 2
┌─name─┬─value─┐
│ one │ 1 │
│ two │ 2 │
└──────┴───────┘
实施细节
- 读取和写入可以并行
- 不支持:
ALTER
和SELECT...SAMPLE
操作。- 索引。
- 复制。
路径中的水珠
多个路径组件可以具有globs。 对于正在处理的文件应该存在并匹配到整个路径模式。 文件列表确定在 SELECT
(不在 CREATE
时刻)。
*
— Substitutes any number of any characters except/
包括空字符串。?
— Substitutes any single character.{some_string,another_string,yet_another_one}
— Substitutes any of strings'some_string', 'another_string', 'yet_another_one'
.{N..M}
— Substitutes any number in range from N to M including both borders.
建筑与 {}
类似于 远程 表功能。
示例
- 假设我们在HDFS上有几个TSV格式的文件,其中包含以下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’
- 有几种方法可以创建由所有六个文件组成的表:
CREATE TABLE table_with_range (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV')
另一种方式:
CREATE TABLE table_with_question_mark (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/{some,another}_dir/some_file_?', 'TSV')
表由两个目录中的所有文件组成(所有文件都应满足query中描述的格式和模式):
CREATE TABLE table_with_asterisk (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV')
!!! warning "警告"
如果文件列表包含带有前导零的数字范围,请单独使用带有大括号的构造或使用 ?
.
示例
创建具有名为文件的表 file000
, file001
, … , file999
:
CREARE TABLE big_table (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV')
虚拟列
_path
— Path to the file._file
— Name of the file.
另请参阅