在 ClickHouse 中插入和转储 SQL 数据
ClickHouse 可以通过多种方式轻松集成到 OLTP 数据库基础设施中。一个方法是使用 SQL 转储在其他数据库和 ClickHouse 之间传输数据。
创建 SQL 转储
数据可以使用 SQLInsert 以 SQL 格式转储。ClickHouse 将以 INSERT INTO <table name> VALUES(...
的形式写入数据,并使用 output_format_sql_insert_table_name
设置选项作为表名:
可以通过禁用 output_format_sql_insert_include_column_names
选项来省略列名:
现在我们可以将 dump.sql 文件提供给另一个 OLTP 数据库:
我们假设 some_table
表在 some_db
MySQL 数据库中存在。
某些 DBMS 可能对单个批次中可以处理的值数量有限制。默认情况下,ClickHouse 将创建 65k 值的批次,但可以通过 output_format_sql_insert_max_batch_size
选项更改:
导出值集合
ClickHouse 具有 Values 格式,该格式类似于 SQLInsert,但省略了 INSERT INTO table VALUES
部分,仅返回一组值:
从 SQL 转储中插入数据
要读取 SQL 转储,可以使用 MySQLDump:
默认情况下,ClickHouse 将忽略未知的列(由 input_format_skip_unknown_fields 选项控制),并处理转储中找到的第一个表的数据(如果多个表转储到单个文件中)。DDL 语句将被跳过。要将数据从 MySQL 转储加载到表中(mysql.sql 文件):
我们还可以根据 MySQL 转储文件自动创建表:
在这里,我们根据 ClickHouse 自动推断的结构创建了一个名为 table_from_mysql
的表。ClickHouse 要么基于数据检测类型,要么在可用时使用 DDL:
其他格式
ClickHouse 引入了对多种格式的支持,包括文本和二进制格式,以涵盖各种场景和平台。请在以下文章中了解更多格式及其使用方法:
- CSV 和 TSV 格式
- Parquet
- JSON 格式
- 正则表达式和模板
- 原生和二进制格式
- SQL 格式
同时查看 clickhouse-local - 一个便携的全功能工具,可以在不需要 ClickHouse 服务器的情况下处理本地/远程文件。