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

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

ClickHouse 文件引擎

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

典型应用场景为:

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

File表引擎用法

语法如下:

sql 复制代码
File(Format)

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

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

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

举例

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

sql 复制代码
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 :

shell 复制代码
$ cat data.TabSeparated
one 1
two 2

查询数据

sql 复制代码
SELECT * FROM file_engine_table

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

ClickHouse-local工具用法

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

shell 复制代码
$ 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

关于默认设置

上传文件直接分析

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

实现步骤:

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

  2. 用户上传csv文件

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

总结

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

相关推荐
sdaxue.com1 小时前
帝国CMS:如何去掉帝国CMS登录界面的认证码登录
数据库·github·网站·帝国cms·认证码
o(╥﹏╥)2 小时前
linux(ubuntu )卡死怎么强制重启
linux·数据库·ubuntu·系统安全
阿里嘎多学长2 小时前
docker怎么部署高斯数据库
运维·数据库·docker·容器
Yuan_o_2 小时前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
Sunyanhui12 小时前
牛客网 SQL36查找后排序
数据库·sql·mysql
老王笔记2 小时前
MHA binlog server
数据库·mysql
lovelin+v175030409663 小时前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析
DT辰白4 小时前
基于Redis的网关鉴权方案与性能优化
数据库·redis·缓存
2401_871213304 小时前
mysql高阶语句
数据库·mysql