百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文
Spark+ClickHouse实战企业级数据仓库:ClickHouse常用的数据格式

Spark+ClickHouse实战企业级数据仓库:ClickHouse常用的数据格式

  • 网站名称:Spark+ClickHouse实战企业级数据仓库:ClickHouse常用的数据格式
  • 网站分类:技术文章
  • 收录时间:2025-08-18 04:51
  • 网站地址:

进入网站

“Spark+ClickHouse实战企业级数据仓库:ClickHouse常用的数据格式” 网站介绍

1、ClickHouse的数据格式概述的数据格式概述

ClickHouse的数据格式分为输入格式和输出格式。 输入格式用于:解析数据用于Insert、执行基于后端文件(例如File、URL或HDFS表引擎)表的select、读取外部字典。 输出格式用于:组织select的查询结果、将数据insert到基于后端文件(例如File、URL或HDFS表引擎)的表。 常见的数据格式有:TabSeparated(TSV)系、CSV系、JSON系、ORC、Parquet等。 更多的数据格式参考官网:
https://clickhouse.com/docs/en/interfaces/formats/。

点获取Spark+ClickHouse实战企业级数据仓库以及Flink+ClickHouse构建数仓项目教程,请私信或留言。

2、TabSeparated(TSV)系系

TabSeparated系格式,按行组织数据,字段之间使用制表符(tab)分隔。 TabSeparated系主要包含TabSeparated(TSV)、TabSeparatedRaw(TSVRaw)、TabSeparatedWithNames(TSVWithNames)和
TabSeparatedWithNamesAndTypes(TSVWithNamesAndTypes)等。

(1)、TabSeparated(TSV): 转义特殊字符。

(2)、TabSeparatedRaw(TSVRaw): 不转义特殊字符。

(3)、TabSeparatedWithNames(TSVWithNames): 首行是列的名称。在查询时,TabSeparatedWithNames格式的第一行显示列的名称。在数据导入时,第一行完全被忽略。

(4)、
TabSeparatedWithNamesAndTypes(TSVWithNamesAndTypes): 前两行分别是列的名称和列数据的类型。 在查询时,
TabSeparatedWithNamesAndTypes格式在主数据的前面额外显示两行数据, 第一行显 示列的名称, 第二行显示列的数据类型。在数据导入时,前两完全被忽略。

需要ClickHouse,湖仓一体,Flink等大数据课程请加薇

2.1 TabSeparated((TSV)格式的插入和查询)格式的插入和查询

创建数据表: CREATE TABLE tsv_demo(srcip String, destip String, time String) ENGINE = TinyLog;

(1)、TSV数据输入 准备TSV格式的数据,字段之间使用tab键分隔: 113.248.234.232 123.212.22.01 2018-07-12 14:35:31 115.248.158.231 154.245.56.23 2020-07-12 13:26:26 115.248.158.231 154.245.56.23 2020-07-12 13:22:13 187.248.135.230 221.228.112.45 2019-08-09 13:17:39 187.248.234.232 221.228.112.24 2019-08-09 20:51:16 115.248.158.231 154.245.56.23 2020-07-12 17:22:56 准备文本, 导入数据脚本: $ clickhouse-client --query "INSERT INTO tsv_demo FORMAT TSV" --max_insert_block_size=100000 < tsv_demo.tsv 查看数据如下: xichen :) select * from tsv_demo; ┌─srcip───────────┬─destip─────────┬─time────────────────┐ │ 113.248.234.232 │ 123.212.22.01 │ 2018-07-12 14:35:31 │ │ 115.248.158.231 │ 154.245.56.23 │ 2020-07-12 13:26:26 │ │ 115.248.158.231 │ 154.245.56.23 │ 2020-07-12 13:22:13 │ │ 187.248.135.230 │ 221.228.112.45 │ 2019-08-09 13:17:39 │ │ 187.248.234.232 │ 221.228.112.24 │ 2019-08-09 20:51:16 │ │ 115.248.158.231 │ 154.245.56.23 │ 2020-07-12 17:22:56 │ └─────────────────┴────────────────┴─────────────────────┘ 6 rows in set. Elapsed: 0.008 sec.

(2)、TSV格式输出 使用TSV格式输出,输出的字段之间使用制表符分隔: localhost :) select * from tsv_demo FORMAT TSV; 113.248.234.232 123.212.22.01 2018-07-12 14:35:31 115.248.158.231 154.245.56.23 2020-07-12 13:26:26 115.248.158.231 154.245.56.23 2020-07-12 13:22:13 187.248.135.230 221.228.112.45 2019-08-09 13:17:39 187.248.234.232 221.228.112.24 2019-08-09 20:51:16 115.248.158.231 154.245.56.23 2020-07-12 17:22:56 6 rows in set. Elapsed: 0.005 sec. 或者使用TSV格式导出数据: clickhouse-client --query "select * from tsv_demo format TSV" > tsv_demo_export.tsv

2.2 TabSeparated和和TabSeparatedRaw格式的对比格式的对比

在数据写入和查询时,使用TabSeparatedRaw格式,不会对特殊字符进行转义,而是按照原样进行写入和查询。

(1)、数据写入 创建数据表: create table escape_demo(name String, addr String, age UInt8, desc String) ENGINE=TinyLog; 准备数据,字段之间使用制表符分隔: zhangsan nanjing\tjiangsu 23 From nanjing lisi hangzhou\tzhejiang 32 \x41 amazing place xiaoming hefei\tanhui 25 notepad 以TabSeparated格式导入数据: clickhouse-client --query="INSERT INTO escape_demo FORMAT TSV" < escape_demo.tsv 数据查询: xichen :) select * from escape_demo; ┌─name─────┬─addr────────────────┬─age─┬─desc────────────┐ │ zhangsan │ nanjing jiangsu │ 23 │ From nanjing │ │ lisi │ hangzhou zhejiang │ 32 │ A amazing place │ │ xiaoming │ hefei anhui │ 25 │ notepad │ └──────────┴─────────────────────┴─────┴─────────────────┘ 以TabSeparatedRaw格式导入数据: xichen :) select * from escape_demo; ┌─name─────┬─addr────────────────┬─age─┬─desc───────────────┐ │ zhangsan │ nanjing\tjiangsu │ 23 │ From nanjing │ │ lisi │ hangzhou\tzhejiang │ 32 │ \x41 amazing place │ │ xiaoming │ hefei\tanhui │ 25 │ notepad │ 1

└──────────┴─────────────────────┴─────┴────────────────────┘

(2)、基于File引擎的数据查询和插入 创建TabSeparated和TabSeparatedRaw格式的表: CREATE TABLE file_engine_table(name String, addr String, age UInt8, desc String) ENGINE=File(TabSeparated); CREATE TABLE file_engine_table_raw (name String, addr String, age UInt8, desc String) ENGINE=File(TabSeparatedRaw); 手工创建文件:
/var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated
/var/lib/clickhouse/data/default/file_engine_table_raw/data.TabSeparatedRaw 这两个文件的内容相同,均包含下面的数据: zhangsan nanjing\tjiangsu 23 From nanjing lisi hangzhou\tzhejiang 32 \x41 amazing place xiaoming hefei\tanhui 25 notepad 执行数据查询: xichen :) select * from file_engine_table; ┌─name─────┬─addr────────────────┬─age─┬─desc────────────┐ │ zhangsan │ nanjing jiangsu │ 23 │ From nanjing │ │ lisi │ hangzhou zhejiang │ 32 │ A amazing place │ │ xiaoming │ hefei anhui │ 25 │ notepad │ └──────────┴─────────────────────┴─────┴─────────────────┘ xichen :) select * from file_engine_table format TSV; zhangsan nanjing\tjiangsu 23 From nanjing lisi hangzhou\tzhejiang 32 A amazing place xiaoming hefei\tanhui 25 notepad xichen :) select * from file_engine_table format TSVRaw; zhangsan nanjing jiangsu 23 From nanjing lisi hangzhou zhejiang 32 A amazing place xiaoming hefei anhui 25 notepad xichen :) select * from file_engine_table_raw; ┌─name─────┬─addr───────────────┬─age─┬─desc───────────────┐ │ zhangsan │ nanjing\tjiangsu │ 23 │ From nanjing │ │ lisi │ hangzhou\tzhejiang │ 32 │ \x41 amazing place │ │ xiaoming │ hefei\tanhui │ 25 │ notepad │ └──────────┴────────────────────┴─────┴────────────────────┘ xichen :) select * from file_engine_table_raw format TSV; zhangsan nanjing\\tjiangsu 23 From nanjing lisi hangzhou\\tzhejiang 32 \\x41 amazing place xiaoming hefei\\tanhui 25 notepad xichen :) select * from file_engine_table_raw format TSVRaw; zhangsan nanjing\tjiangsu 23 From nanjing lisi hangzhou\tzhejiang 32 \x41 amazing place xiaoming hefei\tanhui 25 notepad


2.3 TabSeparatedWithNames(TSVWithNames)格式格式

TabSeparatedWithNames格式也可以使用名称TSVWithNames表示。

不同于TabSeparated格式,在查询时,TabSeparatedWithNames格式的第一行显示列的名称。在数据导入时,第一行完全被忽略,不会解析第一行为表头。

示例:

localhost:)select*fromescape_demo FORMAT TSVWithNames;

nameaddrage desc

zhangsannanjing\tjiangsu23From nanjing

lisihangzhou\tzhejiang32A amazing place

xiaominghefei\tanhui25notepad

3rowsinset.Elapsed:0.007sec.


2.4 TabSeparatedWithNamesAndTypes(TSVWithNamesAndTypes)格式格式


TabSeparatedWithNamesAndTypes格式也可以使用名称TSVWithNamesAndTypes表示。

不用于TabSeparated格式,在查询时,
TabSeparatedWithNamesAndTypes格式在主数据的前面额外显示两行数据,第一行显示列的名称,第二行显示列的数据类型。在数据导入时,前两完全被忽略。

示例:

localhost:)select*fromescape_demo FORMAT TabSeparatedWithNamesAndTypes;

nameaddrage desc

StringStringUInt8String

zhangsannanjing\tjiangsu23From nanjing

lisihangzhou\tzhejiang32A amazing place

xiaominghefei\tanhui25notepad

3rowsinset.Elapsed:0.006sec.