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