創建數據表
導入CSV格式文件,首先保證表存在
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;
上傳數據文件
查看數據庫安全導入目錄,將數據文件上傳至安全目錄
mysql> show variables like '%secure_file_priv%'; +------------------+-----------------------+ | Variable_name | Value | +------------------+-----------------------+ | secure_file_priv | /tmp/ | +------------------+-----------------------+ 1 row in set (0.00 sec)
查看數據庫字符集
mysql> show variables like 'character_set_database'; +------------------------+---------+ | Variable_name | Value | +------------------------+---------+ | character_set_database | utf8mb4 | +------------------------+---------+ 1 row in set (0.00 sec)
將csv文件傳入安全目錄下然后再進行導入操作
導入數據
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
如果建表的時候加入索引,導入數據過大就會導致插入時間過長
加索引:
第一個千萬 耗時兩個半小時
第二個千萬 耗時八個小時四十分鍾
第三個千萬 耗時十六個小時+
無索引:
五千萬 耗時七分鍾
一億 三個半小時
千萬級以上的數據導入時建議不要加索引
創建無索引的表
CREATE TABLE `400w_nizong_data` ( `user_id` varchar(255) , `age` varchar(255) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
導入數據后添加索引
alter table nizong_1e_data add index idx_user_id(user_id);