ClickHouse 十二 (数据文件导入)

1 导入文本文件

建表

# 本地表
 CREATE TABLE test.tmp_uid_info
(
    `uid` Int32,
    `alias` Int32,
    `sex` String,
    `totalDate` Date,
    `source` String,
    `name` String
)
ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/{shard}/tmp_uid_info', '{replica}')
PARTITION BY totalDate
ORDER BY uid
SETTINGS index_granularity = 8192;

# 创建分布式表
CREATE TABLE test.tmp_uid_info_all
(
    `uid` Int32,
    `alias` Int32,
    `sex` String,
    `totalDate` Date,
    `source` String,
    `name` String
)
ENGINE = Distributed('ck_cluster', 'test', 'tmp_uid_info', sipHash64(uid));

uid_info.txt文本文件:

2150	2105	0	2018-10-27	00-00-00	a
2147	2147	0	2018-10-27	00-00-00	b
2161	2161	0	2019-10-27	00-00-00	c
2161	2161	0	2019-10-27	00-00-00	d
2160	2160	0	2019-10-27	00-00-00	e

导入数据命令,写入一个分片即可,测试文本无头列字段,格式采用TabSeparated

cat uid_info.txt | clickhouse-client --query="INSERT INTO test.tmp_uid_info FORMAT TabSeparated"

查询分布式表

SELECT *
FROM tmp_uid_info_all

┌──uid─┬─alias─┬─sex─┬──totalDate─┬─source───┬─name─┐
│ 2160 │  2160 │ 0   │ 2019-10-27 │ 00-00-00 │ e    │
│ 2161 │  2161 │ 0   │ 2019-10-27 │ 00-00-00 │ c    │
│ 2161 │  2161 │ 0   │ 2019-10-27 │ 00-00-00 │ d    │
└──────┴───────┴─────┴────────────┴──────────┴──────┘
┌──uid─┬─alias─┬─sex─┬──totalDate─┬─source───┬─name─┐
│ 2147 │  2147 │ 0   │ 2018-10-27 │ 00-00-00 │ b    │
│ 2150 │  2105 │ 0   │ 2018-10-27 │ 00-00-00 │ a    │
└──────┴───────┴─────┴────────────┴──────────┴──────┘

此处要注意的是文本的格式:

  • TabSeparated :| 数据按行写入,每行包含由制表符分隔的值。每个值后跟一个制表符,除了行中最后一个值后跟换行。在任何地方都采用严格的Unix换行。最后一行还必须在末尾包含换行。值以文本格式编写,不包含引号,并使用转义的特殊字符。需要对tab、换行符、反斜线进行转义处理,分别对应为:\t, \n, \。 NULL值使用\N进行表示。
  • TabSeparatedWithNames :与TabSeparated类似,区别是第一行是列名。解析时,第一行会被忽略,因此不能够使用第一行列名来决定列的位置。

2 导入csv文件

将测试数据导出成csv文件:

clickhouse-client --query="select * from test.tmp_uid_info FORMAT CSV" > uid_info.csv

cat uid_info.csv就可以看到如下文本

2160,2160,"0","2019-10-27","00-00-00","e"
2161,2161,"0","2019-10-27","00-00-00","c"
2161,2161,"0","2019-10-27","00-00-00","d"
2147,2147,"0","2018-10-27","00-00-00","b"
2150,2105,"0","2018-10-27","00-00-00","a"
# truncase est.tmp_uid_info 清除tmp_uid_info表的所有数据
 
# 将uid_info.csv的文件数据导入到clickhouse中
cat uid_info.csv | clickhouse-client --query="INSERT INTO test.tmp_uid_info FORMAT CSV"

此处要注意的是csv的格式:

  • CSV :数据按行写入文件中,默认使用逗号进行列与列之间的分割。字符串类型使用双引号括起来,字符串的双引号本身使用两个双引号进行转义,数值类型不使用双引号。如果列与列之间使用竖线分割,可以使用–format_csv_delimiter指定其他列分隔符,例如cat uid_info.csv | clickhouse-client --format_csv_delimiter=“|” --query=“INSERT INTO test.tmp_uid_info FORMAT CSV”
  • CSVWithNames :与CSV类似,第一行表示列名。解析时,第一行会被直接忽略。

参考文章: clickhouse 官方文档

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
导入CSV文件ClickHouse,可以使用ClickHouse客户端命令行工具或者使用HTTP接口。以下是使用ClickHouse客户端命令行工具的步骤: 1. 确保CSV文件符合ClickHouse的要求,包括文件编码、字段分隔符和换行符等。可以在文件头部指定这些参数。例如: ``` #encoding=UTF-8 #field_separator=, #line_separator=\n ``` 2. 登录到ClickHouse客户端。 3. 使用以下命令创建表: ``` CREATE TABLE table_name (column1 type1, column2 type2, ...) ENGINE = Log; ``` 其中,table_name是要创建的表名,column1、column2等是表的列名,type1、type2等是列的数据类型,Log是存储引擎。 4. 使用以下命令导入数据: ``` INSERT INTO table_name FORMAT CSV < 'file_path'; ``` 其中,table_name是要导入数据的表名,file_path是CSV文件的路径。 5. 导入完成后,使用以下命令查询数据: ``` SELECT * FROM table_name; ``` 以上是使用ClickHouse客户端命令行工具导入CSV文件的步骤。如果要使用HTTP接口导入CSV文件,可以使用以下请求: ``` POST /?query=INSERT%20INTO%20table_name%20FORMAT%20CSV HTTP/1.1 Host: localhost:8123 Content-Type: text/csv column1,column2,... value1,value2,... value3,value4,... ``` 其中,table_name是要导入数据的表名,column1、column2等是表的列名,value1、value2等是要导入的数据。需要注意的是,HTTP请求体中的数据必须是CSV格式,并且每行数据末尾不能有换行符。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

高并发

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

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

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

打赏作者

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

抵扣说明:

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

余额充值