ClickHouse 十二 (数据文件导入)

本文介绍了如何使用ClickHouse从CSV和TabSeparated文本文件中导入数据,包括建表、格式转换和操作分布式表的过程。重点展示了如何处理不同格式的数据导入和查询分布式表的示例。

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 官方文档

评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

高并发

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

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

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

打赏作者

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

抵扣说明:

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

余额充值