用ClickHouse 文件表引擎快速查询分析文件数据

有时我们需要快速查询分析文件数据,正常流程需要在数据库中创建表,然后利用工具或编码导入数据,这时才能在数据库中查询分析。利用ClickHouse文件引擎可以快速查询文件数据。本文首先介绍ClickHouse文件引擎,然后介绍如何快速实现查询数据文件的方案。

ClickHouse 文件引擎

文件表引擎在文件中保存数据,支持的数据格式有:CSV, JSON, XML 等,详细内容可参考官网文档。

典型应用场景为:

  • 从ClickHouse导出数据至文件
  • 对数据进行格式转换
  • 通过编辑文件更新ClickHouse表数据

File表引擎用法

语法如下:

File(Format)

Format 参数制定一种有效的文件格式。为了执行select 查询,格式必须支持输入格式,同样为了insert查询,需支持输出。支持的格式类型可参考官网文档。大部分格式同时支持输入和输出格式,但部分格式仅支持其中之一,如 MySQLDump 仅支持输入,不支持输出。

ClickHouse 不允许指定文件路径,因为文件路径是在服务端配置文件path参数指定。

当实用上面语法创建表时,则会在指定文件夹中创建空的子目录。写入数据时,会在子目录中生成data.Format文件。我们可以在服务端文件系统中手动创建该子目录,然后ATTACH命令链接表信息,也可以从文件中查询数据。但不建议采用该方式,因为ClickHouse不跟踪外部数据变化。

举例

创建 表:file_engine_table,格式为TabSeparated,即数据用tab分隔,就是tsv文件格式。

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

ClickHouse 缺省在该目录下创建子目录: /var/lib/clickhouse/data/default/file_engine_table.

下面手动创建数据文件 /var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated :

$ cat data.TabSeparated
one 1
two 2

查询数据

SELECT * FROM file_engine_table

┌─name─┬─value─┐
│ one  │     1 │
│ two  │     2 │
└──────┴───────┘

ClickHouse-local工具用法

在clickhouse-local工具,文件引擎除了文件格式参数,还可以指定文件路径参数。默认输入/输出流可以使用数字或人类可读的名称来指定,例如0或stdin, 1或stdout。可以根据附加的引擎参数或文件扩展名(gz、br或xz)读写压缩文件。

$ 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"

其他说明

  • 可以并行执行多个 SELECT 查询, 但 INSERT查询彼此互斥需等待前面操作完成.

  • 支持通过INSERT 查询创建新文件.

  • 如果文件已存在, INSERT 操作会追加新的内容.

  • 虽然支持表分区,但不建议使用,也不会增加查询效率

  • 不支持操作

    • ALTER
    • SELECT ... SAMPLE
    • Indices
    • Replication

关于默认设置

  • engine_file_empty_if_not_exists - allows to select empty data from a file that doesn’t exist. Disabled by default.
  • engine_file_truncate_on_insert - allows to truncate file before insert into it. Disabled by default.
  • engine_file_allow_create_multiple_files - allows to create a new file on each insert if format has suffix. Disabled by default.
  • engine_file_skip_empty_files - allows to skip empty files while reading. Disabled by default.
  • storage_file_read_method - method of reading data from storage file, one of: read, pread, mmap. The mmap method does not apply to clickhouse-server (it’s intended for clickhouse-local). Default value: pread for clickhouse-server, mmap for clickhouse-local.

上传文件直接分析

通过上节内容,我们指定文件表引擎就是在固定路径下创建子目录,然后在该子目录中创建对应文件(插入数据)。我们的需求是快速查询分析数据文件,如csv文件,用户上传完就可以分析。

实现步骤:

  1. 需要一些参数,如表名称和描述(英文名和中文名),

  2. 用户上传csv文件

    • 解析csv文件(读取第一行作为字段名称,最好为英文命名,读取第二行数据判断数据类型),如果没有标题行,则自动命名为F1,F2…
    • 使用文件表引擎语法创建表,引用上一步中的参数信息
    • 在元数据中插入表和字段信息,用于自助查询分析场景
    • 在该表中插入csv文件数据,动态生成insert语句。
  3. 查询该表,也可以执行一些统计查询语句。

总结

本文介绍了ClickHouse文件引擎的概念和使用方法。利用文件引擎我们快速实现对数据文件的查询统计分析。

你可能感兴趣的:(ClickHouse,clickhouse,数据库)