clickhouse的insert
时间: 2025-06-19 19:55:33 浏览: 1
### ClickHouse 中 INSERT 用法及示例
ClickHouse 提供了多种数据插入方式,可以根据具体场景选择合适的方法进行优化[^1]。以下是关于 ClickHouse 中 `INSERT` 的基本用法和一些常见示例。
#### 基本语法
标准 SQL 插入语法如下:
```sql
INSERT INTO [db.]table_name [(column1, column2, ...)] VALUES (value11, value12, ...), (value21, value22, ...), ...
```
例如,向表中插入单条或多条记录:
```sql
INSERT INTO db.test_table (id, name) VALUES (1, 'Alice'), (2, 'Bob');
```
#### 使用 Python 插入数据
通过 Python 的 `clickhouse_driver` 库可以方便地与 ClickHouse 进行交互[^3]。以下是一个简单的单条数据插入示例:
```python
from clickhouse_driver import Client
client = Client(
host='localhost',
port=9000,
user='default',
password='',
settings={'use_numpy': True}
)
# 创建表格
client.execute("CREATE TABLE IF NOT EXISTS db.test_table (id Int32, name String) ENGINE = MergeTree")
# 插入单条数据
sql = "INSERT INTO db.test_table (id, name) VALUES (1, 'test_1')"
client.execute(sql)
```
#### 批量插入数据
为了提高性能,通常推荐使用批量插入的方式。以下是一个批量插入的示例:
```python
data = [
(3, 'Charlie'),
(4, 'David')
]
client.execute("INSERT INTO db.test_table (id, name) VALUES", data)
```
#### 避免重复插入
如果需要避免重复插入,可以使用 `ReplicatedMergeTree` 引擎,并启用 `insert_deduplicate` 参数[^2]。例如:
```sql
CREATE TABLE IF NOT EXISTS db.dedup_table (
id Int32,
name String
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/dedup_table', '{replica}')
ORDER BY id SETTINGS index_granularity = 8192;
-- 插入时启用去重机制
SET insert_deduplicate = 1;
INSERT INTO db.dedup_table (id, name) VALUES (1, 'Alice'), (1, 'Alice');
```
在上述示例中,即使插入了两条相同的记录,ClickHouse 也会自动去重[^2]。
#### 性能优化
为了加速 `INSERT` 操作的执行效率,可以考虑以下几点[^4]:
- **减少磁盘 I/O**:尽量减少从磁盘流入主内存的数据量。
- **利用稀疏主索引**:确保表结构设计合理,能够更好地利用稀疏主索引。
- **使用投影**:通过投影技术进一步优化查询性能。
### 示例总结
ClickHouse 的 `INSERT` 语句支持多种形式的数据插入,包括标准 SQL 语法、Python 脚本调用等。同时,通过配置参数如 `insert_deduplicate` 和选择合适的引擎(如 `ReplicatedMergeTree`),可以有效避免重复插入并提升性能。
阅读全文
相关推荐


















