MySQLDump
输入 | 输出 | 别名 |
---|---|---|
✔ | ✗ |
描述
ClickHouse 支持读取 MySQL dumps。
它从转储文件中属于单个表的 INSERT
查询中读取所有数据。如果存在多个表,默认情况下它从第一个表读取数据。
注意
此格式支持 schema 推断:如果转储文件包含指定表的 CREATE
查询,则会从中推断结构,否则 schema 会从 INSERT
查询的数据中推断。
使用示例
给定以下 SQL 转储文件
dump.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
,并且转储文件包含指定表或 INSERT
查询中列名的 CREATE
查询,则输入数据中的列将按名称映射到表中的列。如果设置 input_format_skip_unknown_fields
设置为 1
,则会跳过名称未知的列。