ClickHouse/docs/zh/engines/table-engines/special/file.md

2.8 KiB
Raw Blame History

文件(输入格式)

数据源是以 Clickhouse 支持的一种输入格式TabSeparatedNative等存储数据的文件。

用法示例:

  • 从 ClickHouse 导出数据到文件。
  • 将数据从一种格式转换为另一种格式。
  • 通过编辑磁盘上的文件来更新 ClickHouse 中的数据。

在 ClickHouse 服务器中的使用

File(Format)

选用的 Format 需要支持 INSERTSELECT 。有关支持格式的完整列表,请参阅 格式

ClickHouse 不支持给 File 指定文件系统路径。它使用服务器配置中 路径 设定的文件夹。

使用 File(Format) 创建表时,它会在该文件夹中创建空的子目录。当数据写入该表时,它会写到该子目录中的 data.Format 文件中。

你也可以在服务器文件系统中手动创建这些子文件夹和文件,然后通过 ATTACH 将其创建为具有对应名称的表,这样你就可以从该文件中查询数据了。

!!! 注意 "注意" 注意这个功能,因为 ClickHouse 不会跟踪这些文件在外部的更改。在 ClickHouse 中和 ClickHouse 外部同时写入会造成结果是不确定的。

示例:

1. 创建 file_engine_table 表:

CREATE TABLE file_engine_table (name String, value UInt32) ENGINE=File(TabSeparated)

默认情况下Clickhouse 会创建目录 /var/lib/clickhouse/data/default/file_engine_table

2. 手动创建 /var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated 文件,并且包含内容:

$ cat data.TabSeparated
one 1
two 2

3. 查询这些数据:

SELECT * FROM file_engine_table
┌─name─┬─value─┐
│ one  │     1 │
│ two  │     2 │
└──────┴───────┘

在 Clickhouse-local 中的使用

使用 clickhouse-localFile 引擎除了 Format 之外,还可以接收文件路径参数。可以使用数字或名称来指定标准输入/输出流,例如 0stdin1stdout例如:

$ echo -e "1,2\n3,4" | clickhouse-local -q "CREATE TABLE table (a Int64, b Int64) ENGINE = File(CSV, stdin); SELECT a, b FROM table; DROP TABLE table"

功能实现

  • 读操作可支持并发,但写操作不支持
  • 不支持:
    • ALTER
    • SELECT ... SAMPLE
    • 索引
    • 副本

来源文章