03_ClickHouse数据格式,TabSeparated、TSKV、CSV格式、JSON格式、Parquet、ORC、其它数据格式(Native,Pretty,Values,Vertical等)

1、TabSeparated
1.1 TabSeparated
1.2 TabSeparatedRaw
1.3 TabSeparatedWithNames
1.4 TabSeparatedWithNamesAndTypes
2 TSKV
3 CSV格式:CSV、CSVWithNames
3.1 CSV格式
3.1.1 准备表
3.1.2 准备数据
3.1.3 导入csv格式的表
3.2 CSVWithNames
4 JSON系列格式
4.1 JSON
4.2 JSONCompact
4.3 JSONEachRow
5 Parquet
6 ORC
7 其它常见的数据格式
7.1 Native
7.2 Null
7.3 Pretty
7.4 Values
7.5 Vertical
7.6 XML

1、TabSeparated

这个系列的格式包括:TabSeparated、TabSeparatedRaw、TabSeparatedWithNames和TabSeparatedWithNamesAndTypes

特点:
数据按行写入,tab制表符分隔。使用严格Unix命令行。

默认格式:
简写:TSV
数据插入和数据查询时,均可使用。

1.1 TabSeparated

数据按行写入,tab制表符分隔。使用严格Unix命令行。
注意:最后一行必须包含换行符。
默认格式。
简写:TSV
数据插入和数据查询时,均可使用。

使用clickhouse-client query的方式查询10条结果,并将值存储到aaa.tsv格式里面。

[root@xxxxx ~]# clickhouse-client --query "select WatchID,JavaEnable,Title,RegionID,UserID,EventDate,CounterID from tutorial.hits_v1 limit 10 FORMAT TabSeparated" > aaa.tsv
[root@xxxxx ~]#  
[root@xxxxx ~]# cat aaa.tsv 
7043438415214026105	1		14050	8585742290196126178	2014-03-17	57
4944118417295196513	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4675118455796596620	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
5996666368919599438	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4907059686366943622	1		54	610708775678702928	2014-03-17	57
9126318258181481721	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4710091431795314620	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
8986102154348410145	1		54	610708775678702928	2014-03-17	57
8632456315223530327	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
8894287528226995594	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
[root@xxxxx ~]# 

建表,并按照TabSeparated格式导入数据到表中

[root@xxxxx ~]# clickhouse-client -m
ClickHouse client version 20.9.3.45 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.9.3 revision 54439.

xxxxx :) CREATE TABLE test.TabSeparated_demo
:-] (
:-]     `WatchID` UInt64,
:-]     `JavaEnable` UInt8,
:-]     `Title` String,
:-]     `RegionID` UInt32,
:-]     `UserID` UInt64,
:-] `EventDate` Date,
:-] `CounterID` UInt32
:-] )
:-] ENGINE = MergeTree()
:-] PARTITION BY toYYYYMM(EventDate)
:-] ORDER BY (CounterID, EventDate, intHash32(UserID))
:-] SAMPLE BY intHash32(UserID)
:-] SETTINGS index_granularity = 8192;

CREATE TABLE test.TabSeparated_demo
(
    `WatchID` UInt64,
    `JavaEnable` UInt8,
    `Title` String,
    `RegionID` UInt32,
    `UserID` UInt64,
    `EventDate` Date,
    `CounterID` UInt32
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID)
SETTINGS index_granularity = 8192

Ok.

0 rows in set. Elapsed: 0.008 sec. 

xxxxx :) 

导入数据到表中

[root@xxxxx ~]# clickhouse-client --query "INSERT INTO test.TabSeparated_demo FORMAT TabSeparated" --max_insert_block_size=100000 < aaa.tsv
[root@xxxxx ~]# clickhouse-client --query "select * from test.TabSeparated_demo FORMAT TabSeparated"
7043438415214026105	1		14050	8585742290196126178	2014-03-17	57
4944118417295196513	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4675118455796596620	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
5996666368919599438	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4907059686366943622	1		54	610708775678702928	2014-03-17	57
9126318258181481721	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4710091431795314620	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
8986102154348410145	1		54	610708775678702928	2014-03-17	57
8632456315223530327	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
8894287528226995594	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
[root@xxxxx ~]#

如果在导入过程中出现类似下面的错误:

Code: 117. DB::Exception: 
You have carriage return (\r, 0x0D, ASCII 13) at end of first row.
It's like your input data has DOS/Windows style line separators, that are illegal in TabSeparated format. You must transform your file to Unix format.
But if you really need carriage return at end of string value of last column, you need to escape it as \r.

这是windows使用\r\n表示回车换行,在Linux中使用\n表示换行。因此,需要将\r给去掉。

转换为UNIX格式:

[root@xxxxx ~]# yum install -y dos2unix;     (在没有dos2Unix的时候执行)
已加载插件:fastestmirror
base                                                                                                                                                                            | 3.6 kB  00:00:00     
extras                                                                                                                                                                          | 2.9 kB  00:00:00     
mysql-connectors-community                                                                                                                                                      | 2.6 kB  00:00:00     
mysql-tools-community                                                                                                                                                           | 2.6 kB  00:00:00     
mysql57-community                                                                                                                                                               | 2.6 kB  00:00:00     
updates                                                                                                                                                                         | 2.9 kB  00:00:00     
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.huaweicloud.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 dos2unix.x86_64.0.6.0.3-7.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=======================================================================================================================================================================================================
 Package                                         架构                                          版本                                                  源                                           大小
=======================================================================================================================================================================================================
正在安装:
 dos2unix                                        x86_64                                        6.0.3-7.el7                                           base                                         74 k

事务概要
=======================================================================================================================================================================================================
安装  1 软件包

总下载量:74 k
安装大小:190 k
Downloading packages:
dos2unix-6.0.3-7.el7.x86_64.rpm                                                                                                                                                 |  74 kB  00:00:05     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : dos2unix-6.0.3-7.el7.x86_64                                                                                                                                                        1/1 
  验证中      : dos2unix-6.0.3-7.el7.x86_64                                                                                                                                                        1/1 

已安装:
  dos2unix.x86_64 0:6.0.3-7.el7                                                                                                                                                                        

完毕!
[root@xxxxx ~]#
[root@xxxxx ~]# dos2unix tsv_demo.tsv

1.2 TabSeparatedRaw

简称:TSVRaw
TabSeparatedRaw格式不会对行数据进行转义,即不会将换行、制表符等转换为转义字符。
只能在数据查询的时候使用。

zhangsan	nanjing\tjiangsu	23	From nanjing
lisi	hangzhou\tzhejiang	32	\x41 amazing place
xiaoming	hefei\tanhui	25	notepad

建表语句:

create table escape_demo(name String,addr String,age UInt8,desc String) ENGINE=TinyLog;

select * from escape_demo FORMAT TSV;
zhangsan	nanjing\tjiangsu	23	From nanjing
lisi	hangzhou\tzhejiang	32	A amazing place
xiaoming	hefei\tanhui	25	notepad

3 rows in set. Elapsed: 0.005 sec.


SELECT *
FROM escape_demo
FORMAT TabSeparatedRaw;

zhangsan	nanjing	jiangsu	23	From nanjing
lisi	hangzhou	zhejiang	32	A amazing place
xiaoming	hefei	anhui	25	notepad

3 rows in set. Elapsed: 0.005 sec

1.3 TabSeparatedWithNames

在查询时,TabSeparatedWithNames格式的第一行显示列的名称
在数据导入时,第一行完全被忽略,不会解析第一行为表头。
简称:TSVWithNames
在数据查询和数据导入均可使用。

数据导入:

clickhouse-client --query="INSERT INTO escape_demo FORMAT TSVWithNames" < escape_demo.tsv

数据查询:

select * from escape_demo FORMAT TSVWithNames;

再如查询:

xxxxx :) use tutorial;

USE tutorial

Ok.

0 rows in set. Elapsed: 0.002 sec. 

xxxxx :) show tables;

SHOW TABLES

┌─name──────┐
│ hits_v1   │
│ visits_v1 │
└───────────┘

2 rows in set. Elapsed: 0.005 sec. 

xxxxx :) select WatchID,JavaEnable,Title,RegionID,UserID,EventDate,CounterID from tutorial.hits_v1 limit 10 FORMAT TSVWithNames;

SELECT 
    WatchID,
    JavaEnable,
    Title,
    RegionID,
    UserID,
    EventDate,
    CounterID
FROM tutorial.hits_v1
LIMIT 10
FORMAT TSVWithNames

## 注意下面的第一行数据,这一行数据是表头。

WatchID	JavaEnable	Title	RegionID	UserID	EventDate	CounterID
7043438415214026105	1		14050	8585742290196126178	2014-03-17	57
4944118417295196513	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4675118455796596620	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
5996666368919599438	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4907059686366943622	1		54	610708775678702928	2014-03-17	57
9126318258181481721	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4710091431795314620	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
8986102154348410145	1		54	610708775678702928	2014-03-17	57
8632456315223530327	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
8894287528226995594	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57

10 rows in set. Elapsed: 0.014 sec. 

xxxxx :)

1.4 TabSeparatedWithNamesAndTypes

在查询时,TabSeparatedWithNamesAndTypes格式在主数据的前面额外显示两行数据,第一行显示列的名称, 第二行显示列的数据类型。
在数据导入时,前面两行的数据完全被忽略。
简写:TSVWithNamesAndTypes
在数据导入和查询时均可使用。

xxxxx :) select WatchID,JavaEnable,Title,RegionID,UserID,EventDate,CounterID from tutorial.hits_v1 limit 10 FORMAT TSVWithNamesAndTypes;

SELECT 
    WatchID,
    JavaEnable,
    Title,
    RegionID,
    UserID,
    EventDate,
    CounterID
FROM tutorial.hits_v1
LIMIT 10
FORMAT TSVWithNamesAndTypes

## 注意下面的前两行数据。

WatchID	JavaEnable	Title	RegionID	UserID	EventDate	CounterID
UInt64	UInt8	String	UInt32	UInt64	Date	UInt32
7043438415214026105	1		14050	8585742290196126178	2014-03-17	57
4944118417295196513	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4675118455796596620	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
5996666368919599438	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4907059686366943622	1		54	610708775678702928	2014-03-17	57
9126318258181481721	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
4710091431795314620	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
8986102154348410145	1		54	610708775678702928	2014-03-17	57
8632456315223530327	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57
8894287528226995594	1	вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	54	610708775678702928	2014-03-17	57

10 rows in set. Elapsed: 0.027 sec. 

xxxxx :) 

2 TSKV

TSKV格式不适合有大量小列的输出.
TSKV的效率并不比JSONEachRow差.
TSKV数据查询和数据导入。
不需要保证列的顺序。
支持忽略某些值,这些列使用默认值,例如0和空白行。复杂类型的值必须指定,无法使用默认值。

查看:

xxxxx :) select WatchID,JavaEnable,Title,RegionID,UserID,EventDate,CounterID from tutorial.hits_v1 limit 10 FORMAT TSKV;

SELECT 
    WatchID,
    JavaEnable,
    Title,
    RegionID,
    UserID,
    EventDate,
    CounterID
FROM tutorial.hits_v1
LIMIT 10
FORMAT TSKV

WatchID=7043438415214026105	JavaEnable=1	Title=	RegionID=14050	UserID=8585742290196126178	EventDate=2014-03-17	CounterID=57
WatchID=4944118417295196513	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=4675118455796596620	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=5996666368919599438	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=4907059686366943622	JavaEnable=1	Title=	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=9126318258181481721	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=4710091431795314620	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=8986102154348410145	JavaEnable=1	Title=	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=8632456315223530327	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=8894287528226995594	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57

10 rows in set. Elapsed: 0.012 sec. 

xxxxx :) 

导出:

[root@xxxxx ~]# clickhouse-client --query "select WatchID,JavaEnable,Title,RegionID,UserID,EventDate,CounterID from tutorial.hits_v1 limit 10 FORMAT TSKV" > tskv.demo
[root@xxxxx ~]# cat tskv.demo 
WatchID=7043438415214026105	JavaEnable=1	Title=	RegionID=14050	UserID=8585742290196126178	EventDate=2014-03-17	CounterID=57
WatchID=4944118417295196513	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=4675118455796596620	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=5996666368919599438	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=4907059686366943622	JavaEnable=1	Title=	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=9126318258181481721	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=4710091431795314620	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=8986102154348410145	JavaEnable=1	Title=	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=8632456315223530327	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
WatchID=8894287528226995594	JavaEnable=1	Title=вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва	RegionID=54	UserID=610708775678702928	EventDate=2014-03-17	CounterID=57
[root@xxxxx ~]#

建表

[root@xxxxx ~]# clickhouse-client -m
ClickHouse client version 20.9.3.45 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.9.3 revision 54439.

xxxxx :) create table escape_demo(
:-]     `WatchID` UInt64,
:-]     `JavaEnable` UInt8,
:-]     `Title` String,
:-]     `RegionID` UInt32,
:-]     `UserID` UInt64,
:-] `EventDate` Date,
:-] `CounterID` UInt32
:-] ) ENGINE=TinyLog
:-] PARTITION BY toYYYYMM(EventDate)
:-] ORDER BY (CounterID, EventDate, intHash32(UserID))
:-] SAMPLE BY intHash32(UserID)
:-] SETTINGS index_granularity = 8192;

CREATE TABLE escape_demo
(
    `WatchID` UInt64,
    `JavaEnable` UInt8,
    `Title` String,
    `RegionID` UInt32,
    `UserID` UInt64,
    `EventDate` Date,
    `CounterID` UInt32
)
ENGINE = TinyLog
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID)
SETTINGS index_granularity = 8192


Received exception from server (version 20.9.3):
Code: 57. DB::Exception: Received from localhost:9000. DB::Exception: Table default.escape_demo already exists.. 

0 rows in set. Elapsed: 0.017 sec. 

xxxxx :)

导入:

clickhouse-client --query "insert into escape_demo FORMAT TSKV" < tskv.demo

3 CSV格式:CSV、CSVWithNames

3.1 CSV格式

CSV默认的分隔符为逗号,format_csv_delimiter设置自定义的分隔符。

CSV中的双引号使用两个双引号转义。
支持数据的查询和数据导入。

3.1.1 准备表
[root@xxxxx ~]# clickhouse-client -m
ClickHouse client version 20.9.3.45 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.9.3 revision 54439.

xxxxx :) create table csv_demo(create_date Date, update_time DateTime, desc String) ENGINE=TinyLog;

CREATE TABLE csv_demo
(
    `create_date` Date,
    `update_time` DateTime,
    `desc` String
)
ENGINE = TinyLog

Ok.

0 rows in set. Elapsed: 0.008 sec. 

xxxxx :) 
3.1.2 准备数据
[root@xxxxx ~]# vim csv_dmeo.csv

[root@xxxxx ~]# cat csv_dmeo.csv 
2014-03-23|2014-03-23 14:10:14|Apache Spark achieves high performance
2014-03-23|2014-03-23 15:10:30|Spark offers over 80 high-level operators
1395990600|1395904200|Learning Apache "Spark" is easy
[root@xxxxx ~]#
3.1.3 导入csv格式的表
[root@xxxxx ~]# clickhouse-client --format_csv_delimiter="|" --query="INSERT INTO csv_demo FORMAT CSV" < csv_dmeo.csv
[root@xxxxx ~]#
xxxxx :) select * from csv_demo FORMAT CSV;

SELECT *
FROM csv_demo
FORMAT CSV

"2014-03-23","2014-03-23 14:10:14","Apache Spark achieves high performance"
"2014-03-23","2014-03-23 15:10:30","Spark offers over 80 high-level operators"
"1970-01-01","2014-03-27 15:10:00","Learning Apache ""Spark"" is easy"

3 rows in set. Elapsed: 0.005 sec. 

xxxxx :)

数据查看:

set format_csv_delimiter='|'
select * from csv_demo FORMAT CSV;

3.2 CSVWithNames

CSVWithNames会打印表头的信息。
支持数据的导入和数据的查看。

xxxxx :) select * from csv_demo FORMAT CSVWithNames;

SELECT *
FROM csv_demo
FORMAT CSVWithNames

"create_date","update_time","desc"
"2014-03-23","2014-03-23 14:10:14","Apache Spark achieves high performance"
"2014-03-23","2014-03-23 15:10:30","Spark offers over 80 high-level operators"
"1970-01-01","2014-03-27 15:10:00","Learning Apache ""Spark"" is easy"

3 rows in set. Elapsed: 0.003 sec. 

xxxxx :) 

4 JSON系列格式

JSON系列的有JSON、JSONCompact和JSONEachRow

4.1 JSON

JSON格式只支持数据的输出,不支持数据的解析(数据导入)。

xxxxx :) create table t_json_demo(id UInt8, prov String) ENGINE=TinyLog;

CREATE TABLE t_json_demo
(
    `id` UInt8,
    `prov` String
)
ENGINE = TinyLog

Ok.

0 rows in set. Elapsed: 0.052 sec. 

xxxxx :) insert into t_json_demo values (1, 'jiangsu'),(1, 'jiangsu'),(2, 'anhui'),(2, 'anihu'),(3, 'beijing');

INSERT INTO t_json_demo VALUES

Ok.

5 rows in set. Elapsed: 0.005 sec. 

xxxxx :) select * from t_json_demo tjd FORMAT JSON;

SELECT *
FROM t_json_demo AS tjd
FORMAT JSON

{
	"meta":
	[
		{
			"name": "id",
			"type": "UInt8"
		},
		{
			"name": "prov",
			"type": "String"
		}
	],

	"data":
	[
		{
			"id": 1,
			"prov": "jiangsu"
		},
		{
			"id": 1,
			"prov": "jiangsu"
		},
		{
			"id": 2,
			"prov": "anhui"
		},
		{
			"id": 2,
			"prov": "anihu"
		},
		{
			"id": 3,
			"prov": "beijing"
		}                                                                                                                                     

	],

	"rows": 5,

	"statistics":
	{
		"elapsed": 0.005569144,
		"rows_read": 5,
		"bytes_read": 81
	}
}

5 rows in set. Elapsed: 0.010 sec. 

xxxxx :)

默认情况下,Int64和UInit64的整型使用双引号包裹,如果要移除双引号,设置配置参数output_format_json_quote_64bit_integers为0

rows_before_limit_at_least : 只有查询包含LIMIT时才输出,只有在包含group by的语句中才有意义。当查询没有LIMIT时, 执行结果的最小行数。

xxxxx :) select * from t_json_demo tjd limit 2 FORMAT JSON;

SELECT *
FROM t_json_demo AS tjd
LIMIT 2
FORMAT JSON

{
	"meta":
	[
		{
			"name": "id",
			"type": "UInt8"
		},
		{
			"name": "prov",
			"type": "String"
		}
	],

	"data":
	[
		{
			"id": 1,
			"prov": "jiangsu"
		},
		{
			"id": 1,
			"prov": "jiangsu"
		}                                                                                                                                     

	],

	"rows": 2,

	"rows_before_limit_at_least": 2,

	"statistics":
	{
		"elapsed": 0.002507346,
		"rows_read": 2,
		"bytes_read": 34
	}
}

2 rows in set. Elapsed: 0.005 sec. 

xxxxx :)

4.2 JSONCompact

JSON格式的数据以对象的方式输出, 而JSONCompact以数组的方式输出。
JSONCompact只支持数据的查看, 不支持数据的导入。

xxxxx :) select * from t_json_demo tjd limit 2 FORMAT JSONCompact;

SELECT *
FROM t_json_demo AS tjd
LIMIT 2
FORMAT JSONCompact

{
	"meta":
	[
		{
			"name": "id",
			"type": "UInt8"
		},
		{
			"name": "prov",
			"type": "String"
		}
	],

	"data":
	[
		[1, "jiangsu"],
		[1, "jiangsu"]                                                                                                                        

	],

	"rows": 2,

	"rows_before_limit_at_least": 2,

	"statistics":
	{
		"elapsed": 0.002586191,
		"rows_read": 2,
		"bytes_read": 34
	}
}

2 rows in set. Elapsed: 0.005 sec. 

xxxxx :)

4.3 JSONEachRow

每行数据以换行符分隔的JSON对象。
支持数据的输入和数据导入。

xxxxx :) select * from t_json_demo tjd limit 2 FORMAT JSONEachRow;

SELECT *
FROM t_json_demo AS tjd
LIMIT 2
FORMAT JSONEachRow

{"id":1,"prov":"jiangsu"}
{"id":1,"prov":"jiangsu"}

2 rows in set. Elapsed: 0.005 sec. 

xxxxx :)

输入导入:
对象中键值对的顺序可任意排列。
可以缺失某些字段

xxxxx :) create table UserActivity (PageViews UInt8, UserID String, Duration UInt64, Sign Int8) ENGINE TinyLog;

CREATE TABLE UserActivity
(
    `PageViews` UInt8,
    `UserID` String,
    `Duration` UInt64,
    `Sign` Int8
)
ENGINE = TinyLog

Ok.

0 rows in set. Elapsed: 0.052 sec.
xxxxx :) INSERT INTO UserActivity FORMAT JSONEachRow {"PageViews":5, "UserID":"4324182021466249494", "Duration":146,"Sign":-1}{"UserID":"4324182021466249494","PageViews":6,"Duration":185,"Sign":1};

缺失值的处理:

CREATE TABLE IF NOT EXISTS example_table
(
    x UInt32,
    a DEFAULT x + 2
) ENGINE = Memory;

insert into example_table FORMAT JSONEachRow {"x":3, "a":5} {"x":4};

效果图:

xxxxx :) CREATE TABLE IF NOT EXISTS example_table
:-] (
:-]     x UInt32,
:-]     a DEFAULT x + 2
:-] ) ENGINE = Memory;

CREATE TABLE IF NOT EXISTS example_table
(
    `x` UInt32,
    `a` DEFAULT x + 2
)
ENGINE = Memory

Ok.

0 rows in set. Elapsed: 0.005 sec. 

xxxxx :) insert into example_table FORMAT JSONEachRow {"x":3,"a":5}{"x":4};

INSERT INTO example_table FORMAT JSONEachRow

Ok.

2 rows in set. Elapsed: 0.006 sec. 

xxxxx :) select * from example_table FORMAT JSONEachRow;

SELECT *
FROM example_table
FORMAT JSONEachRow

{"x":3,"a":"5"}
{"x":4,"a":"6"}

2 rows in set. Elapsed: 0.004 sec. 

xxxxx :)

参数:input_format_defaults_for_omitted_fields
如果为0,则x和a的默认值等于0(即UInt32数据类型的默认值)
如果为1,则x的默认值等于0,但a的默认值等于x+2.

xxxxx :) CREATE TABLE json_each_row_nested (n Nested (s String, i Int32) ) ENGINE = Memory;

CREATE TABLE json_each_row_nested
(
    `n` Nested(    s String,     i Int32)
)
ENGINE = Memory

Ok.

0 rows in set. Elapsed: 0.005 sec. 

xxxxx :) INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n.s": ["abc", "def"], "n.i": [1, 23]};

INSERT INTO json_each_row_nested FORMAT JSONEachRow

Ok.

1 rows in set. Elapsed: 0.005 sec. 

xxxxx :) INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n": { "s": ["aaa", "bbb"],"i": [2, 30]}};

INSERT INTO json_each_row_nested FORMAT JSONEachRow

Code: 117, e.displayText() = DB::Exception: Unknown field found while parsing JSONEachRow format: n: (at row 1)
, Stack trace (when copying this message, always include the lines below):

0. /build/obj-x86_64-linux-gnu/../contrib/poco/Foundation/src/Exception.cpp:27: Poco::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0x18e1b360 in /usr/lib/debug/usr/bin/clickhouse
1. /build/obj-x86_64-linux-gnu/../src/Common/Exception.cpp:37: DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0xe736dad in /usr/lib/debug/usr/bin/clickhouse
2. /build/obj-x86_64-linux-gnu/../contrib/libcxx/include/string:2134: DB::JSONEachRowRowInputFormat::skipUnknownField(StringRef const&) (.cold) @ 0x1660be4b in /usr/lib/debug/usr/bin/clickhouse
3. /build/obj-x86_64-linux-gnu/../src/Processors/Formats/Impl/JSONEachRowRowInputFormat.cpp:191: DB::JSONEachRowRowInputFormat::readJSONObject(std::__1::vector<COW<DB::IColumn>::mutable_ptr<DB::IColumn>, std::__1::allocator<COW<DB::IColumn>::mutable_ptr<DB::IColumn> > >&) @ 0x16609e13 in /usr/lib/debug/usr/bin/clickhouse
4. /build/obj-x86_64-linux-gnu/../src/Processors/Formats/Impl/JSONEachRowRowInputFormat.cpp:257: DB::JSONEachRowRowInputFormat::readRow(std::__1::vector<COW<DB::IColumn>::mutable_ptr<DB::IColumn>, std::__1::allocator<COW<DB::IColumn>::mutable_ptr<DB::IColumn> > >&, DB::RowReadExtension&) @ 0x1660a306 in /usr/lib/debug/usr/bin/clickhouse
5. /build/obj-x86_64-linux-gnu/../src/Processors/Formats/IRowInputFormat.cpp:64: DB::IRowInputFormat::generate() @ 0x165aa161 in /usr/lib/debug/usr/bin/clickhouse
6. /build/obj-x86_64-linux-gnu/../contrib/libcxx/include/vector:1003: DB::ISource::work() @ 0x1651f65b in /usr/lib/debug/usr/bin/clickhouse
7. /build/obj-x86_64-linux-gnu/../src/Processors/Formats/InputStreamFromInputFormat.h:49: DB::InputStreamFromInputFormat::readImpl() @ 0x164e364d in /usr/lib/debug/usr/bin/clickhouse
8. /build/obj-x86_64-linux-gnu/../contrib/libcxx/include/vector:1003: DB::IBlockInputStream::read() @ 0x156c6d3d in /usr/lib/debug/usr/bin/clickhouse
9. /build/obj-x86_64-linux-gnu/../contrib/libcxx/include/vector:1003: DB::ParallelParsingBlockInputStream::parserThreadFunction(std::__1::shared_ptr<DB::ThreadGroupStatus>, unsigned long) @ 0x164e7aa0 in /usr/lib/debug/usr/bin/clickhouse
10. /build/obj-x86_64-linux-gnu/../contrib/libcxx/include/memory:4206: std::__1::__function::__func<DB::ParallelParsingBlockInputStream::scheduleParserThreadForUnitWithNumber(unsigned long)::'lambda'(), std::__1::allocator<DB::ParallelParsingBlockInputStream::scheduleParserThreadForUnitWithNumber(unsigned long)::'lambda'()>, void ()>::operator()() @ 0x164e8724 in /usr/lib/debug/usr/bin/clickhouse
11. /build/obj-x86_64-linux-gnu/../contrib/libcxx/include/atomic:856: ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0xe7650a7 in /usr/lib/debug/usr/bin/clickhouse
12. /build/obj-x86_64-linux-gnu/../src/Common/ThreadPool.h:170: ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()&&...)::'lambda'()::operator()() const @ 0xe76581a in /usr/lib/debug/usr/bin/clickhouse
13. /build/obj-x86_64-linux-gnu/../contrib/libcxx/include/atomic:856: ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xe7645b7 in /usr/lib/debug/usr/bin/clickhouse
14. /build/obj-x86_64-linux-gnu/../contrib/libcxx/include/memory:2615: void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void ThreadPoolImpl<std::__1::thread>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()> >(void*) @ 0xe762b03 in /usr/lib/debug/usr/bin/clickhouse
15. start_thread @ 0x7e25 in /usr/lib64/libpthread-2.17.so
16. __clone @ 0xf834d in /usr/lib64/libc-2.17.so
 (version 20.9.3.45 (official build))

Exception on client:
Code: 117. DB::Exception: Unknown field found while parsing JSONEachRow format: n: (at row 1)


Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.9.3 revision 54439.

xxxxx :) set input_format_import_nested_json=1;

SET input_format_import_nested_json = 1

Ok.

0 rows in set. Elapsed: 0.007 sec. 

xxxxx :) INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n": { "s": ["aaa", "bbb"],"i": [2, 30]}};

INSERT INTO json_each_row_nested FORMAT JSONEachRow

Ok.

1 rows in set. Elapsed: 0.004 sec. 

xxxxx :)

上面的例子说明:
如果要将类似:{“n”: { “s”: [“aaa”, “bbb”],“i”: [2, 30]}} 这种分层JSON对象插入,需要设置input_format_import_nested_json=1。即执行set input_format_import_nested_json=1;

对于ClickHouse,默认input_format_import_nested_json=0。

5 Parquet

支持Parquet格式的导出和导入。

Parquet和ClickHouse类型的匹配关系:
Parquet data type (INSERT)| ClickHouse data type| Parquet data type (SELECT)
UINT8,BOOL UInt8 UINT8
INT8 Int8 INT8
UINT16 UInt16 UINT16
INT16 Int16 INT16
UINT32 UInt32 UINT32
INT32 Int32 INT32
UINT64 UInt64 UINT64
INT64 Int64 INT64
FLOAT,HALF_FLOAT Float32 FLOAT
DOUBLE Float64 DOUBLE
DATE32 Date UINT16
DATE64,TIMESTAMP DateTime UINT32
STRING,BINARY String STRING
— FixedString STRING
DECIMAL Decimal DECIMAL

不支持的Parquet数据类型:DATE32, TIME32, FIXED_SIZE_BINARY, JSON, UUID, ENUM。

注意:ClickHouse表的列名必须与Parquet表的列名一致。
ClickHouse表的列数据类型可以不同于插入的Parquet数据类型。在插入数据时, ClickHouse根据上表解释数据类型,然后将数据类型转换为ClickHouse表的列数据类型。

数据的导出:

clickhouse-client --query="SELECT * FROM tsv_demo FORMAT Parquet" > parquet_demo.parquet

数据导入:

create table parquet_demo (srcip String, destip String, time String) ENGINE=TinyLog;
cat parquet_demo.parquet | clickhouse-client --query="INSERT INTO parquet_demo FORMAT Parquet"

6 ORC

仅支持ORC格式的写入

ORC和CH数据类型的匹配关系:

ORC data type (INSERT)|ClickHouse data type
UINT8, BOOL UInt8
INT8 Int8
UINT16 UInt16
INT16 Int16
UINT32 UInt32
INT32 Int32
UINT64 UInt64
INT64 Int64
FLOAT, HALF_FLOAT Float32
DOUBLE Float64
DATE32 Date
DATE64, TIMESTAMP DateTime
STRING, BINARY String
DECIMAL Decimal

不支持的ORC数据类型:DATE32,TIME32,FIXED_SIZE_BINARY,JSON,UUID,ENUM。
Not: ClientHouse表的列名必须与ORC表的列名一致。

使用Spark生成ORC文件:
val list = List(
  ("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")
)

val rdd = sc.makeRDD(list)
import spark.implicits._
val df = rdd.toDF("srcip", "destip", "time")
df.repartition(1).write.format("orc").mode("append").save("/tmp/orc")

测试表:

create table orc_demo (srcip String, destip String, time DateTime) ENGINE=TinyLog;

数据导入:

cat file.orc | clickhouse-client --query="INSERT INTO orc_demo FORMAT ORC"

7 其它常见的数据格式

7.1 Native

数据以二进制数据块的方式进行读写。
数据的导出:

clickhouse-client --query="SELECT * FROM tsv_demo FORMAT Native" > a.native

数据的导出:

clickhouse-client --query="insert into tsv_demo FORMAT Native" < a.native

再如:

xxxxx :) show tables;

SHOW TABLES

┌─name──────────────┐
│ TabSeparated_demo │
│ test              │
└───────────────────┘

2 rows in set. Elapsed: 0.006 sec. 

xxxxx :) select * from TabSeparated_demo FORMAT Native;

SELECT *
FROM TabSeparated_demo
FORMAT Native


WatchIDUInt64y,kQ¿aaf	Dÿ 8w[ᅫ≰8S9ȠD:2§~¼OŻ3]A!5OL
                                                               µ|/H¥˷=(
bڮ{
JavaEnableUInt8TitleStringjвышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силваjвышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силваjвышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силваjвышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силваjвышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силваjвышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силваjвышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силв.RegionIDUInt32ശ66666666UserIDUInt64ᗰ¬¯&wP钥¬P钥¬P钥¬P钥¬P钥¬P钥¬P钥¬P钥¬P钥¬y    EventDateDate??????????	CounterIDUInt329999999999                                                                                                                                          

10 rows in set. Elapsed: 0.010 sec. 

xxxxx :)

7.2 Null

主要用于测试性能。 查询会被处理,并且数据会被传送到客户端,但是什么也不输出。
Null格式只能用于查询,不能用于数据的导入。

7.3 Pretty

PrettyCompact : 在交互式模式下,默认的数据显示格式。
PrettySpace

xxxxx :) select * from TabSeparated_demo FORMAT PrettyCompact;

SELECT *
FROM TabSeparated_demo
FORMAT PrettyCompact

┌─────────────WatchID─┬─JavaEnable─┬─Title───────────────────────────────────────────────────────────┬─RegionID─┬──────────────UserID─┬──EventDate─┬─CounterID─┐
│ 70434384152140261051 │                                                                 │    1405085857422901961261782014-03-1757 │
│ 49441184172951965131 │ вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва │       546107087756787029282014-03-1757 │
│ 46751184557965966201 │ вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва │       546107087756787029282014-03-1757 │
│ 59966663689195994381 │ вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва │       546107087756787029282014-03-1757 │
│ 49070596863669436221 │                                                                 │       546107087756787029282014-03-1757 │
│ 91263182581814817211 │ вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва │       546107087756787029282014-03-1757 │
│ 47100914317953146201 │ вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва │       546107087756787029282014-03-1757 │
│ 89861021543484101451 │                                                                 │       546107087756787029282014-03-1757 │
│ 86324563152235303271 │ вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва │       546107087756787029282014-03-1757 │
│ 88942875282269955941 │ вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва │       546107087756787029282014-03-1757 │
└─────────────────────┴────────────┴─────────────────────────────────────────────────────────────────┴──────────┴─────────────────────┴────────────┴───────────┘

10 rows in set. Elapsed: 0.005 sec. 

xxxxx :)
xxxxx :) select * from TabSeparated_demo FORMAT PrettySpace;

SELECT *
FROM TabSeparated_demo
FORMAT PrettySpace

             WatchID   JavaEnable   Title                                                             RegionID                UserID    EventDate   CounterID

 7043438415214026105            1                                                                        14050   8585742290196126178   2014-03-17          57 
 4944118417295196513            1   вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва         54    610708775678702928   2014-03-17          57 
 4675118455796596620            1   вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва         54    610708775678702928   2014-03-17          57 
 5996666368919599438            1   вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва         54    610708775678702928   2014-03-17          57 
 4907059686366943622            1                                                                           54    610708775678702928   2014-03-17          57 
 9126318258181481721            1   вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва         54    610708775678702928   2014-03-17          57 
 4710091431795314620            1   вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва         54    610708775678702928   2014-03-17          57 
 8986102154348410145            1                                                                           54    610708775678702928   2014-03-17          57 
 8632456315223530327            1   вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва         54    610708775678702928   2014-03-17          57 
 8894287528226995594            1   вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва         54    610708775678702928   2014-03-17          57 

10 rows in set. Elapsed: 0.007 sec. 

xxxxx :)

7.4 Values

每行之间使用逗号分隔,列之间也是使用逗号分隔。在括号中打印每一行。
INSERT INTO XX values

INSERT INTO XX FORMAT Values;

insert into tsv_demo FORMAT Values (‘115.248.158.231’, ‘115.248.158.232’, ‘2020-07-12 17:22:56’), (‘115.248.158.231’, ‘115.248.158.232’, ‘2020-07-12 17:22:56’);

7.5 Vertical

数据以垂直的格式进行展示。\G

xxxxx :) select * from TabSeparated_demo FORMAT Vertical;

SELECT *
FROM TabSeparated_demo
FORMAT Vertical

Row 1:
──────
WatchID:    7043438415214026105
JavaEnable: 1
Title:      
RegionID:   14050
UserID:     8585742290196126178
EventDate:  2014-03-17
CounterID:  57

Row 2:
──────
WatchID:    4944118417295196513
JavaEnable: 1
Title:      вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва
RegionID:   54
UserID:     610708775678702928
EventDate:  2014-03-17
CounterID:  57

Row 3:
──────
WatchID:    4675118455796596620
JavaEnable: 1
Title:      вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва
RegionID:   54
UserID:     610708775678702928
EventDate:  2014-03-17
CounterID:  57

Row 4:
──────
WatchID:    5996666368919599438
JavaEnable: 1
Title:      вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва
RegionID:   54
UserID:     610708775678702928
EventDate:  2014-03-17
CounterID:  57

Row 5:
──────
WatchID:    4907059686366943622
JavaEnable: 1
Title:      
RegionID:   54
UserID:     610708775678702928
EventDate:  2014-03-17
CounterID:  57

Row 6:
──────
WatchID:    9126318258181481721
JavaEnable: 1
Title:      вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва
RegionID:   54
UserID:     610708775678702928
EventDate:  2014-03-17
CounterID:  57

Row 7:
──────
WatchID:    4710091431795314620
JavaEnable: 1
Title:      вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва
RegionID:   54
UserID:     610708775678702928
EventDate:  2014-03-17
CounterID:  57

Row 8:
──────
WatchID:    8986102154348410145
JavaEnable: 1
Title:      
RegionID:   54
UserID:     610708775678702928
EventDate:  2014-03-17
CounterID:  57

Row 9:
───────
WatchID:    8632456315223530327
JavaEnable: 1
Title:      вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва
RegionID:   54
UserID:     610708775678702928
EventDate:  2014-03-17
CounterID:  57

Row 10:
───────
WatchID:    8894287528226995594
JavaEnable: 1
Title:      вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва
RegionID:   54
UserID:     610708775678702928
EventDate:  2014-03-17
CounterID:  57

10 rows in set. Elapsed: 0.007 sec. 

xxxxx :)

7.6 XML

只支持数据的查看。
SELECT * from tsv_demo limit 2 FORMAT XML;

xxxxx :) select * from TabSeparated_demo FORMAT XML;

SELECT *
FROM TabSeparated_demo
FORMAT XML

<?xml version='1.0' encoding='UTF-8' ?>
<result>
	<meta>
		<columns>
			<column>
				<name>WatchID</name>
				<type>UInt64</type>
			</column>
			<column>
				<name>JavaEnable</name>
				<type>UInt8</type>
			</column>
			<column>
				<name>Title</name>
				<type>String</type>
			</column>
			<column>
				<name>RegionID</name>
				<type>UInt32</type>
			</column>
			<column>
				<name>UserID</name>
				<type>UInt64</type>
			</column>
			<column>
				<name>EventDate</name>
				<type>Date</type>
			</column>
			<column>
				<name>CounterID</name>
				<type>UInt32</type>
			</column>
		</columns>
	</meta>
	<data>
		<row>
			<WatchID>7043438415214026105</WatchID>
			<JavaEnable>1</JavaEnable>
			<Title></Title>
			<RegionID>14050</RegionID>
			<UserID>8585742290196126178</UserID>
			<EventDate>2014-03-17</EventDate>
			<CounterID>57</CounterID>
		</row>
		<row>
			<WatchID>4944118417295196513</WatchID>
			<JavaEnable>1</JavaEnable>
			<Title>вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва</Title>
			<RegionID>54</RegionID>
			<UserID>610708775678702928</UserID>
			<EventDate>2014-03-17</EventDate>
			<CounterID>57</CounterID>
		</row>
		<row>
			<WatchID>4675118455796596620</WatchID>
			<JavaEnable>1</JavaEnable>
			<Title>вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва</Title>
			<RegionID>54</RegionID>
			<UserID>610708775678702928</UserID>
			<EventDate>2014-03-17</EventDate>
			<CounterID>57</CounterID>
		</row>
		<row>
			<WatchID>5996666368919599438</WatchID>
			<JavaEnable>1</JavaEnable>
			<Title>вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва</Title>
			<RegionID>54</RegionID>
			<UserID>610708775678702928</UserID>
			<EventDate>2014-03-17</EventDate>
			<CounterID>57</CounterID>
		</row>
		<row>
			<WatchID>4907059686366943622</WatchID>
			<JavaEnable>1</JavaEnable>
			<Title></Title>
			<RegionID>54</RegionID>
			<UserID>610708775678702928</UserID>
			<EventDate>2014-03-17</EventDate>
			<CounterID>57</CounterID>
		</row>
		<row>
			<WatchID>9126318258181481721</WatchID>
			<JavaEnable>1</JavaEnable>
			<Title>вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва</Title>
			<RegionID>54</RegionID>
			<UserID>610708775678702928</UserID>
			<EventDate>2014-03-17</EventDate>
			<CounterID>57</CounterID>
		</row>
		<row>
			<WatchID>4710091431795314620</WatchID>
			<JavaEnable>1</JavaEnable>
			<Title>вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва</Title>
			<RegionID>54</RegionID>
			<UserID>610708775678702928</UserID>
			<EventDate>2014-03-17</EventDate>
			<CounterID>57</CounterID>
		</row>
		<row>
			<WatchID>8986102154348410145</WatchID>
			<JavaEnable>1</JavaEnable>
			<Title></Title>
			<RegionID>54</RegionID>
			<UserID>610708775678702928</UserID>
			<EventDate>2014-03-17</EventDate>
			<CounterID>57</CounterID>
		</row>
		<row>
			<WatchID>8632456315223530327</WatchID>
			<JavaEnable>1</JavaEnable>
			<Title>вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва</Title>
			<RegionID>54</RegionID>
			<UserID>610708775678702928</UserID>
			<EventDate>2014-03-17</EventDate>
			<CounterID>57</CounterID>
		</row>
		<row>
			<WatchID>8894287528226995594</WatchID>
			<JavaEnable>1</JavaEnable>
			<Title>вышивка в Москве - Образовать фото мочия - Почта Mail.Ru: Силва</Title>
			<RegionID>54</RegionID>
			<UserID>610708775678702928</UserID>
			<EventDate>2014-03-17</EventDate>
			<CounterID>57</CounterID>
		</row>
	</data>
	<rows>10</rows>
	<statistics>
		<elapsed>0.004350061</elapsed>
		<rows_read>10</rows_read>
		<bytes_read>1102</bytes_read>
	</statistics>
</result>

10 rows in set. Elapsed: 0.007 sec. 

xxxxx :)
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值