因为ClickHouse的更新节奏很快,很多内容可能不断调整,2.10(当前最新的发行版本)与1.9版本不一样,此次是以1.9版本演示.
clickhouse-client --version
ClickHouse client version 19.9.5.36.
File引擎以data.format
格式存储,常见format
格式有CSV
,TSV
,JSONEachRow
.
create table tableName (col1 type,col2 type...)engine =File(format);
创建表语句并没有指定路径,所以没有办法指定路径进行数据访问.
创建表并添加数据
use mydatabase;
create table CSVFileTest(id Int8,name String)engine =File(CSV);
create table TSVFileTest(id Int8,name String)engine =File(TSV);
create table JSONFileTest(id Int8,name String)engine =File(JSONEachRow);
insert into CSVFileTest values(1,'zhangsan'),(2,'lisi');
insert into TSVFileTest values(1,'zhangsan'),(2,'lisi');
insert into JSONFileTest values(1,'zhangsan'),(2,'lisi');
数据存储在对应的数据库表下:
/var/lib/clickhouse/data/{库名}/{表名}/data.{fomat}
vim /var/lib/clickhouse/data/mydatabase/CSVFileTest/data.CSV
vim /var/lib/clickhouse/data/mydatabase/TSVFileTest/data.TSV
vim /var/lib/clickhouse/data/mydatabase/JSONFileTest/data.JSONEachRow
如果将表关联到外部文件?
1 使用File引擎
先创建文件
cat data.CSV
1,"zhaoliu","2020-01-01"
2,"tianqi","2020-01-02"
创建表
create table importCSV(id Int8,name String,date Date)engine =File (CSV);
创建好表后,在对应目录已经有表名命名的文件夹,但是没有data.CSV
此时赋值创建好的数据文件到此目录下.
cp data.CSV /var/lib/clickhouse/data/mydatabase/importCSV/
执行查询:
node01 :) select * from importCSV;
SELECT *
FROM importCSV
┌─id─┬─name────┬───────date─┐
│ 1 │ zhaoliu │ 2020-01-01 │
│ 2 │ tianqi │ 2020-01-02 │
└────┴─────────┴────────────┘
上述方式需要先创建表,如果我们自己创建表目录:
mkdir /var/lib/clickhouse/data/mydatabase/importCSV2/
cp data.CSV /var/lib/clickhouse/data/mydatabase/importCSV2/
此时创建表有些版本会报错(我现在用的版本不会),如果你的版本也报错,不要用create 来创建表,而是用attach来装载表:
attach table importCSV2(id Int8,name String,date Date)engine =File (CSV);
2 file表函数
select * from file(path, format, structure)
format
:CSV,``TSV,``JSONEachRow
等
structure
:字段以及类型
path
:这个路径是相对路径,并非随意路径,相对于/etc/clickhouse- server/config.xml
中的user_files_path
默认是/var/lib/clickhouse/user_files/
所以需要提前把数据放到这里
复制数据到/var/lib/clickhouse/user_files/
目录
cp data.CSV /var/lib/clickhouse/user_files/data.CSV
成功访问到数据
node01 :) select * from file('data.CSV','CSV','id Int,name String,date Date');
SELECT *
FROM file('data.CSV', 'CSV', 'id Int,name String,date Date')
┌─id─┬─name────┬───────date─┐
│ 1 │ zhaoliu │ 2020-01-01 │
│ 2 │ tianqi │ 2020-01-02 │
└────┴─────────┴────────────┘
2 rows in set. Elapsed: 0.002 sec.