ClickHouse是一个开源的列式数据库管理系统,用于实时OLAP的分析或汇总工作负载。
与行式数据库不同,ClickHouse采用了列式存储的结构组织数据,每个列被单独存储和压缩,从而实现高压缩率和查询性能。这使其成为处理海量实时数据的理想选择。
客户端连接示例
python
import pandas as pd
from sqlalchemy import create_engine
# 使用sqlalchemy连接ClickHouse
engine = create_engine("clickhouse://default:password@localhost:8123/default")
# 查询数据
sql = "SELECT * FROM test_table LIMIT 10"
df = pd.read_sql(sql, engine)
print(df)
数据类型
ClickHouse支持丰富的数据类型,比如数值型、日期时间型、字符串型等。同时也支持Nullable和数组类型。
sql
CREATE TABLE data_types
(
id UInt64,
name String,
time DateTime DEFAULT now(),
marks Array(UInt8)
)
ENGINE = Memory
数据导入
可以使用 INSERT、公用的表格式或 Parquet/ORC/JSON/CSV 格式导入数据。
python
df.to_sql("test_table", engine, index=False, if_exists="append")
分布式表
ClickHouse支持横切分片、度量分片等多种分布式表格式,可以横向扩展处理PB级数据。
sql
CREATE TABLE visits
(
...
) ENGINE = Distributed(cluster, default, visits);
SQL查询
支持丰富的SQL查询功能,如分组、排序、 joins、子查询、窗口函数等。并提供功能强大的SQL解析和优化执行引擎。
sql
SELECT
count() AS count,
countryId
FROM table
GROUP BY countryId
ORDER BY count DESC
聚合查询
支持完整的SQL聚合查询,例如count、sum、avg、min、max、any、median等聚合函数。
sql
SELECT
sum(amount)
FROM orders
原子写入
ClickHouse采用一致性哈希和两个阶段提交机制,保证原子性写操作。写操作的记录被暂时存储,等所有副本确认后才提交到数据部分。
定制化分析
可以通过编写UDF扩展ClickHouse的功能。比如实现自定义的聚集函数、过滤条件等。
sql
CREATE FUNCTION custom_func()
ClickHouse通过其列式存储的设计理念,支持快速的OLAP案例。与之对应的数据导入、分布式表格、SQL查询等机制,均以支持大规模实时日志分析为目标。它的高可扩展性和原子性,也使其具有应对海量实时数据的优势。
通过本篇笔记,诸位可以初步了解了ClickHouse的一些重要概念和特性,以及使用Python连接和操作ClickHouse的示例代码。这可以为后续进一步学习和应用ClickHouse数据库奠定相对坚实的基础。