-- 創建數據庫
drop database if EXISTS UserBehavior;
CREATE DATABASE IF NOT EXISTS UserBehavior CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; -- 引用數據庫
use UserBehavior;-- 創建表
drop table if EXISTS UserBehavior;
create table UserBehavior(
ID int not null AUTO_INCREMENT,
用戶ID varchar(255),
商品ID varchar(255),
商品類目ID varchar(255),
行為類型 varchar(255),-- 包含(商品詳情頁pv,buy商品購買,cart將商品加入購物車,fav收藏商品)
時間戳 varchar(255), -- 時間戳,設置成數字型,會報錯ERROR 1265 (01000): Data truncated for column '時間戳' at row 1
primary key(ID)
)AUTO_INCREMENT = 1; -- 設定自增列ID從1開始自增-- 檢查mysqld導入導出功能設置
/*
報錯:[Err] 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
原因: 安裝MySQL的時候限制了導入與導出的目錄權限只能在規定的目錄下才能導入導出
修正: 1:查找my.ini文件中secure-file-priv選項對應的目標文件(導入導出)目錄,不是my-default.ini2: 修改選項,需要重啟mysql服務器;或者將.csv文件直接拷貝到此目錄下
*/
select @@basedir; -- 定位mysql安裝文件夾 C:Program FilesMySQLMySQL Server 5.7,my-default.ini
select @@datadir; -- 定位mysqlProgramData目錄文件夾 C:ProgramDataMySQLMySQL Server 5.7Data,mysql.ini
show variables like '%secure%'; -- 查看my.ini文件中 secure_file_priv = C:ProgramDataMySQLMySQL Server 5.7Uploads-- 批量導入數據(csv文件)
/*
CR:Carriage Return,對應ASCII中轉義字符r,表示回車
LF:Linefeed,對應ASCII中轉義字符n,表示換行
CRLF:Carriage Return & Linefeed,rn,表示回車并換行
眾所周知,Windows操作系統采用兩個字符來進行換行,即CRLF;
Unix/Linux/Mac OS X操作系統采用單個字符LF來進行換行;
另外,MacIntosh操作系統(即早期的Mac操作系統)采用單個字符CR來進行換行。需要借助Navicat 客戶端的導入向導,選擇10行,精準的定位數據行分隔符,否則可能只能成功導入1行數據;
*//* 空值處理
字段中的空值 null 需要使用 N 表示,
如果用空字符串表示,那么根據不同的數據類型,MySQL 處理也各異數據庫字段如果是varchar/char,插入空時,load data 默認導入 空字符串
數據庫字段如果是decimal,插入空時,load data 默認導入 0.00000000
數據庫字段如果是datetime,插入空時,load data 默認導入 0000-00-00 00:00:00
*/
-- 受影響的行: 100150807
-- 時間: 954.464s 約 15分鐘
load data infile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/UserBehavior.csv' into table UserBehavior -- 設定文件,目標表格,全路徑必須用/不是
character set utf8 -- 設定字符集
fields terminated by ',' -- 設置字段分隔符
enclosed by '"' -- 設置文本限定符
lines terminated by 'n' -- 設置數據行分隔符,需要借助Navicat 客戶端的導入向導,驗證
(用戶ID,商品ID,商品類目ID,行為類型,時間戳); -- 設置插入數值的字段,必須注意順序,類型的匹配
數據驗證
第一列,是自增列,后續5列為數據源值,沒有亂碼,正確
3 腳本導出
/* 空值處理
字段中的空值 null 需要使用 N 表示,
如果用空字符串表示,那么根據不同的數據類型,MySQL 處理也各異數據庫字段如果是varchar/char,插入空時,load data 默認導入 空字符串
數據庫字段如果是decimal,插入空時,load data 默認導入 0.00000000
數據庫字段如果是datetime,插入空時,load data 默認導入 0000-00-00 00:00:00
*/-- 檢查mysqld導入導出功能設置
/*
報錯:[Err] 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
原因: 安裝MySQL的時候限制了導入與導出的目錄權限只能在規定的目錄下才能導入導出
修正: 1:查找my.ini文件中secure-file-priv選項對應的目標文件(導入導出)目錄,不是my-default.ini2: 修改選項,需要重啟mysql服務器;或者將.csv文件直接拷貝到此目錄下
*/
select @@basedir; -- 定位mysql安裝文件夾 C:Program FilesMySQLMySQL Server 5.7,my-default.ini
select @@datadir; -- 定位mysqlProgramData目錄文件夾 C:ProgramDataMySQLMySQL Server 5.7Data,mysql.ini
show variables like '%secure%'; -- 查看my.ini文件中 secure_file_priv = C:ProgramDataMySQLMySQL Server 5.7Uploads-- 批量導出數據(csv文件)
-- 受影響的行: 100150807
-- 時間: 189.626s ~ 3分鐘
-- 目標文件 5.18 GB (5,564,252,503 字節)select * from UserBehavior into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/UserBehavior2.csv' -- 設定文件,目標表格,必須全路徑
character set utf8 -- 設定字符集
fields terminated by ',' -- 設置字段分隔符
optionally enclosed by '"' -- 設置文本限定符
lines terminated by 'n'; -- 設置數據行分隔符