将csv文件导入MySQL中
创建数据表
导入CSV格式文件,首先保证表存在
1 2 3 4 5 | CREATE TABLE `nizong_1e_data` ( `user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `age` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, INDEX `phone`(`user_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; |
上传数据文件
查看数据库安全导入目录,将数据文件上传至安全目录
1 2 3 4 5 6 7 | mysql> show variables like '%secure_file_priv%' ; +------------------+-----------------------+ | Variable_name | Value | +------------------+-----------------------+ | secure_file_priv | /tmp/ | +------------------+-----------------------+ 1 row in set (0.00 sec) |
查看数据库字符集
1 2 3 4 5 6 7 | mysql> show variables like 'character_set_database' ; +------------------------+---------+ | Variable_name | Value | +------------------------+---------+ | character_set_database | utf8mb4 | +------------------------+---------+ 1 row in set (0.00 sec) |
将csv文件传入安全目录下然后再进行导入操作
导入数据
1 2 3 4 | load data infile '/tmp/5KW_PIR.csv' into table nizong_5kw_data character set utf8mb4 fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n' ; |
问题列表
1、现象:执行命令后,查看数据表仅有一行数据
定位:检查第一行数据是否与真实数据完全匹配,第一行最后列字段是否录入了第二行数据
方法:行分隔符使用错误,比如hive导出的csv的行分隔符为\n
如果建表的时候加入索引,导入数据过大就会导致插入时间过长
加索引:
第一个千万 耗时两个半小时
第二个千万 耗时八个小时四十分钟
第三个千万 耗时十六个小时+
无索引:
五千万 耗时七分钟
一亿 三个半小时
千万级以上的数据导入时建议不要加索引
创建无索引的表
1 2 3 4 5 | CREATE TABLE `400w_nizong_data` ( `user_id` varchar(255) , `age` varchar(255) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; |
导入数据后添加索引
1 | alter table nizong_1e_data add index idx_user_id(user_id); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义