Bootstrap

跟着chatgpt一起学|clickhouse入门(4)数据导入和查询

clickhouse基本概念:跟着chatgpt一起学|2.clickhouse入门(1)-CSDN博客 

clickhouse中的数据建模和表设计:跟着chatgpt一起学|2.Clickhouse入门(2)-CSDN博客

clickhouse中的MergeTree:跟着chatgpt一起学|clickhouse入门(3)MergeTree-CSDN博客

本篇将会带大家尝试下,使用clickhouse客户端工具(clienthouse-client)以及python代码的方式,来进行数据的导入和查询。

目录

4.1 使用clickhouse-client进行数据操作

4.1.1 使用clickhouse-client将学生信息导入clickhouse

4.1.2 使用clickhouse-client查询学生信息 

4.2 使用python语句进行数据操作


4.1 使用clickhouse-client进行数据操作

整体的语法和其他数据库非常相似

4.1.1 使用clickhouse-client将学生信息导入clickhouse

首先,假设我们有一个名为students的表,它包含id、name和age字段。我们将准备一个包含学生信息的文本文件student_data.tsv,格式如下:

```plaintext
1   Alice   20
2   Bob     21
3   Charlie 22
```

接下来,我们将使用clickhouse-client将这些学生信息导入ClickHouse中。假设ClickHouse服务器位于localhost上,端口号为9000。

首先,使用以下命令连接到ClickHouse服务器:

```bash

clickhouse-client --host=localhost --port=9000

```

然后,我们需要在ClickHouse中创建一个名为students的表来存储学生信息。可以使用以下SQL语句在ClickHouse中创建表:

CREATE TABLE students (
    id UInt32,
    name String,
    age UInt8
) ENGINE = MergeTree()
ORDER BY id;

接下来,我们可以使用INSERT INTO语句将数据从student_data.tsv文件导入到ClickHouse的students表中:

INSERT INTO students FORMAT TSV < /path/to/student_data.tsv

这将从student_data.tsv文件中读取数据,并将其插入到名为students的表中。

当然,当数据极少时,你可以使用insert语句直接导入

INSERT INTO students (id, name, age) VALUES
    (1, 'Alice', 20),
    (2, 'Bob', 21),
    (3, 'Charlie', 22);

4.1.2 使用clickhouse-client查询学生信息 

--查询students表内所有数据
SELECT * FROM students;

--有条件查询,查询students表内所有age>20的学生数据
SELECT * FROM students WHERE age > 20;

注意,当建表为分区表时,查询语句中应当带上分区字段

--建表语句
CREATE TABLE students (
    id UInt32,
    name String,
    age UInt8
) ENGINE = MergeTree()
PARTITION BY age --分区字段为age
ORDER BY id;

--查询语句
SELECT * FROM students WHERE age > 20;
--这将返回年龄大于20岁的学生信息,ClickHouse会自动优化查询以提高性能。

4.2 使用python语句进行数据操作

先安装必需的包:

```bash
pip install clickhouse-driver
```



from clickhouse_driver import Client

# 连接到ClickHouse服务器
client = Client('localhost')
#client = Client(host='localhost', user='admin',
#                password='123456', database='test',)

# 插入数据
client.execute('INSERT INTO students (id, name, age) VALUES', [
    (4, 'David', 23),
    (5, 'Eva', 22)
])

# 查询数据
result = client.execute('SELECT * FROM students')

# 打印查询结果
for row in result:
    print(row)

这段代码假设已经表已经创建成功,实际上也可以在python内直接进行表的创建,感兴趣的小伙伴可以试一试。

;