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