跳到主要内容
跳到主要内容

MySQLDump

输入输出别名

描述

ClickHouse 支持读取 MySQL 的 转储文件(dump)

它会从转储文件中属于某个单表的 INSERT 语句中读取所有数据。 如果存在多个表,默认从第一个表中读取数据。

注意

此格式支持表结构推断:如果转储文件中包含该指定表的 CREATE 语句,则从中推断表结构;否则从 INSERT 语句中的数据推断表结构。

示例用法

假设有如下 SQL 转储文件:

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `test` (
  `x` int DEFAULT NULL,
  `y` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `test` VALUES (1,NULL),(2,NULL),(3,NULL),(3,NULL),(4,NULL),(5,NULL),(6,7);
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `test 3` (
  `y` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `test 3` VALUES (1);
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `test2` (
  `x` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `test2` VALUES (1),(2),(3);

我们可以执行以下查询:

DESCRIBE TABLE file(dump.sql, MySQLDump) 
SETTINGS input_format_mysql_dump_table_name = 'test2'
┌─name─┬─type────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ x    │ Nullable(Int32) │              │                    │         │                  │                │
└──────┴─────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
SELECT *
FROM file(dump.sql, MySQLDump)
SETTINGS input_format_mysql_dump_table_name = 'test2'
┌─x─┐
│ 1 │
│ 2 │
│ 3 │
└───┘

格式设置

可以使用 input_format_mysql_dump_table_name 设置来指定要读取数据的表名。 如果将 input_format_mysql_dump_map_columns 设置为 1,并且转储中包含该表的 CREATE 查询,或者在 INSERT 查询中包含指定的列名,则输入数据中的列会按名称映射到该表中的列。 如果将 input_format_skip_unknown_fields 设置为 1,具有未知名称的列将会被忽略。