-- 創(chuàng)建數(shù)據(jù)庫
drop database if EXISTS UserBehavior;
CREATE DATABASE IF NOT EXISTS UserBehavior CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; -- 引用數(shù)據(jù)庫
use UserBehavior;-- 創(chuàng)建表
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), -- 時間戳,設(shè)置成數(shù)字型,會報(bào)錯ERROR 1265 (01000): Data truncated for column '時間戳' at row 1
primary key(ID)
)AUTO_INCREMENT = 1; -- 設(shè)定自增列ID從1開始自增-- 檢查mysqld導(dǎo)入導(dǎo)出功能設(shè)置
/*
報(bào)錯:[Err] 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
原因: 安裝MySQL的時候限制了導(dǎo)入與導(dǎo)出的目錄權(quán)限只能在規(guī)定的目錄下才能導(dǎo)入導(dǎo)出
修正: 1:查找my.ini文件中secure-file-priv選項(xiàng)對應(yīng)的目標(biāo)文件(導(dǎo)入導(dǎo)出)目錄,不是my-default.ini2: 修改選項(xiàng),需要重啟mysql服務(wù)器;或者將.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-- 批量導(dǎo)入數(shù)據(jù)(csv文件)
/*
CR:Carriage Return,對應(yīng)ASCII中轉(zhuǎn)義字符r,表示回車
LF:Linefeed,對應(yīng)ASCII中轉(zhuǎn)義字符n,表示換行
CRLF:Carriage Return & Linefeed,rn,表示回車并換行
眾所周知,Windows操作系統(tǒng)采用兩個字符來進(jìn)行換行,即CRLF;
Unix/Linux/Mac OS X操作系統(tǒng)采用單個字符LF來進(jìn)行換行;
另外,MacIntosh操作系統(tǒng)(即早期的Mac操作系統(tǒng))采用單個字符CR來進(jìn)行換行。需要借助Navicat 客戶端的導(dǎo)入向?qū)?#xff0c;選擇10行,精準(zhǔn)的定位數(shù)據(jù)行分隔符,否則可能只能成功導(dǎo)入1行數(shù)據(jù);
*//* 空值處理
字段中的空值 null 需要使用 N 表示,
如果用空字符串表示,那么根據(jù)不同的數(shù)據(jù)類型,MySQL 處理也各異數(shù)據(jù)庫字段如果是varchar/char,插入空時,load data 默認(rèn)導(dǎo)入 空字符串
數(shù)據(jù)庫字段如果是decimal,插入空時,load data 默認(rèn)導(dǎo)入 0.00000000
數(shù)據(jù)庫字段如果是datetime,插入空時,load data 默認(rèn)導(dǎo)入 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 -- 設(shè)定文件,目標(biāo)表格,全路徑必須用/不是
character set utf8 -- 設(shè)定字符集
fields terminated by ',' -- 設(shè)置字段分隔符
enclosed by '"' -- 設(shè)置文本限定符
lines terminated by 'n' -- 設(shè)置數(shù)據(jù)行分隔符,需要借助Navicat 客戶端的導(dǎo)入向?qū)?#xff0c;驗(yàn)證
(用戶ID,商品ID,商品類目ID,行為類型,時間戳); -- 設(shè)置插入數(shù)值的字段,必須注意順序,類型的匹配
數(shù)據(jù)驗(yàn)證
第一列,是自增列,后續(xù)5列為數(shù)據(jù)源值,沒有亂碼,正確
3 腳本導(dǎo)出
/* 空值處理
字段中的空值 null 需要使用 N 表示,
如果用空字符串表示,那么根據(jù)不同的數(shù)據(jù)類型,MySQL 處理也各異數(shù)據(jù)庫字段如果是varchar/char,插入空時,load data 默認(rèn)導(dǎo)入 空字符串
數(shù)據(jù)庫字段如果是decimal,插入空時,load data 默認(rèn)導(dǎo)入 0.00000000
數(shù)據(jù)庫字段如果是datetime,插入空時,load data 默認(rèn)導(dǎo)入 0000-00-00 00:00:00
*/-- 檢查mysqld導(dǎo)入導(dǎo)出功能設(shè)置
/*
報(bào)錯:[Err] 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
原因: 安裝MySQL的時候限制了導(dǎo)入與導(dǎo)出的目錄權(quán)限只能在規(guī)定的目錄下才能導(dǎo)入導(dǎo)出
修正: 1:查找my.ini文件中secure-file-priv選項(xiàng)對應(yīng)的目標(biāo)文件(導(dǎo)入導(dǎo)出)目錄,不是my-default.ini2: 修改選項(xiàng),需要重啟mysql服務(wù)器;或者將.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-- 批量導(dǎo)出數(shù)據(jù)(csv文件)
-- 受影響的行: 100150807
-- 時間: 189.626s ~ 3分鐘
-- 目標(biāo)文件 5.18 GB (5,564,252,503 字節(jié))select * from UserBehavior into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/UserBehavior2.csv' -- 設(shè)定文件,目標(biāo)表格,必須全路徑
character set utf8 -- 設(shè)定字符集
fields terminated by ',' -- 設(shè)置字段分隔符
optionally enclosed by '"' -- 設(shè)置文本限定符
lines terminated by 'n'; -- 設(shè)置數(shù)據(jù)行分隔符