SQL转储
更新时间:2024-11-25
SQL转储
ClickHouse 可以通过多种方式轻松集成到OLTP数据库基础架构中。一种方法是使用SQL转储在其他数据库和ClickHouse之间传输数据。
创建SQL转储
- 可以使用SQLInsert以 SQL格式转储数据。ClickHouse将在
INSERT INTO <table name> VALUES(...
表单中写入数据并使用output_format_sql_insert_table_name
设置选项作为表名:
SET output_format_sql_insert_table_name = 'some_table';
SELECT * FROM some_data
INTO OUTFILE 'dump.sql'
FORMAT SQLInsert
- 可以通过禁用选项来省略列名
output_format_sql_insert_include_column_names
SET output_format_sql_insert_include_column_names = 0
3.现在可以将dump.sql文件提供给另一个OLTP数据库:
mysql some_db < dump.sql
- 假设该
some_table
表存在于some_db
MySQL 数据库中。
某些 DBMS 可能会限制单个批次中可以处理的值的数量。默认情况下,ClickHouse 将创建 65k 个值批次,但可以使用以下output_format_sql_insert_max_batch_size
选项进行更改:
`SET output_format_sql_insert_max_batch_size = 1000;`
导出一组值
ClickHouse具有Values格式,它与SQLInsert类似,但省略了一部分INSERT INTO table VALUES
并仅返回一组值:
SELECT * FROM some_data LIMIT 3 FORMAT Values
('Bangor_City_Forest','2015-07-01',34),('Alireza_Afzal','2017-02-01',24),('Akhaura-Laksam-Chittagong_Line','2015-09-01',30)
从SQL转储插入数据
要读取SQL转储,可以使用MySQLDump :
SELECT *
FROM file('dump.sql', MySQLDump)
LIMIT 5
┌─path───────────────────────────┬──────month─┬─hits─┐
│ Bangor_City_Forest │ 2015-07-01 │ 34 │
│ Alireza_Afzal │ 2017-02-01 │ 24 │
│ Akhaura-Laksam-Chittagong_Line │ 2015-09-01 │ 30 │
│ 1973_National_500 │ 2017-10-01 │ 80 │
│ Attachment │ 2017-09-01 │ 1356 │
└────────────────────────────────┴────────────┴──────┘
默认情况下,ClickHouse将跳过未知列(由input_format_skip_unknown_fields选项控制)并处理转储中找到的第一个表的数据(以防多个表被转储到单个文件中)。将跳过DDL语句。要将数据从 MySQL转储加载到表中(mysql.sql文件):
INSERT INTO some_data
FROM INFILE 'mysql.sql' FORMAT MySQLDump
还可以从MySQL转储文件中自动创建表:
CREATE TABLE table_from_mysql
ENGINE = MergeTree
ORDER BY tuple() AS
SELECT *
FROM file('mysql.sql', MySQLDump)
这里table_from_mysql
根据ClickHouse自动推断的结构创建了一个表。ClickHouse 可以根据数据检测类型,或者在可用时使用 DDL:
DESCRIBE TABLE table_from_mysql;
┌─name──┬─type─────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ path │ Nullable(String) │ │ │ │ │ │
│ month │ Nullable(Date32) │ │ │ │ │ │
│ hits │ Nullable(UInt32) │ │ │ │ │ │
└───────┴──────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘