日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql导入亿级数据_如何将上亿条大容量数据导入MYSQL

發布時間:2023/12/31 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql导入亿级数据_如何将上亿条大容量数据导入MYSQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我有一份數據量達到1,0015,0806條的csv文件,現在需要導入Mysql中。 在我電腦中安裝的版本是MYSQL8.0.12,常見的管理工具有:

已知的有三種辦法: 1.用圖形管理工具Navicat Premium通過導入向導8個步驟導入數據;

2.使用MYSQL Workbench 中的table data import導入數據;

3.使用load data infile語句導入;

最后結果:

方法1,2適合數據量較小的數據導入,在我導入數據時,由于數據太大,總是導入不成功。耗時巨大,最多的時候只能導入1000條數據,所以,不建議采用。 曾經我有想過把文件拆開,因為有1億條數據,我想著拆成10個文件每個文件有1000萬條數據,但是網上查了要么說需要下載拆分工具,要么用python,這兩個我都不熟,所以果斷舍棄,使用方法3導入。 數據導入前有準備工作要做,為將導入的文件找存放位置,建立相應數據庫例如test,在test小創建表格并設置對應的列屬性,接下來用Notepad++打開csv文件,查看文件編碼格式,務必保證導入數據的編碼格式是ANSI編碼格式,若文件編碼不正確改變編碼格式

打開MYSQL命令窗口查詢已有數據庫并使用相應數據褲

接下來使用load data 命令導入數據了,使用命令之前有必要先了解load data 語法,根據官網參考手冊,語法如下:

LOW_PRIORITY修飾符

功能:改變語句調度的優先級如果把執行檢索(SELECT)的客戶端稱為"讀取者",把執行修改操作(DELETE、INSERT、REPLACE或UPDATE)的客戶端稱 為"寫入者"。MYSQL 的默認調度策略是寫入操作優先于讀取操作。 LOW_PRIORITY關鍵字影響DELETE、INSERT、LOAD DATA、REPLACE和UPDATE語句(寫入操作)的執行調度。通常情況下,某張數據表正在被讀取的時候,如果有寫入操作到達,那么寫入者一直等待讀取者完成操 作(查詢開始之后就不能中斷,因此允許讀取者完成操作)。如果寫入者正在等待的時候,另一個讀取操作到達了,該讀取操作也會被阻塞,因為默 認的調度策略是寫入者優先于讀取者。當第一個讀取者完成操作的時候,寫入者開始操作,并且直到該寫入者完成操作,第二個讀取者才開始操作。 如果寫入操作是一個LOW_PRIORITY(低優先級)請求,那么系統就不會認為它的優先級高于讀取操作。在這種情況下,如果寫入者在等待的時候,第 二個讀取者到達了,那么就允許第二個讀取者插到寫入者之前。只有在沒有其它的讀取者的時候,才允許寫入者開始操作。理論上,這種調度修改暗示著,可能存在 LOW_PRIORITY寫入操作永遠被阻塞的情況。如果前面的讀取操作在進行的過程中一直有其它的讀取操作到達,那么新的請求都會插入到 LOW_PRIORITY寫入操作之前。

CONCURRENT修飾符使用load data ,如果使用滿足并發插入條件CONCURRENT的MYISAM表指定(即,中間不包含空閑塊),則其他會話可以在執行load data時從表中檢索數據。即使沒有其他會話同時使用該表,使用該CONCURRENT選項load data也會影響某個位的性能。

輸入文件名:文件名必須以文字字符串形式給出。在Windows上,將路徑名中的反斜杠指定為正斜杠或加倍反斜杠(重點)

分隔符:fields關鍵字指定了文件記段的分割格式,如果用到這個關鍵字,MySQL剖析器希望看到至少有下面的一個選項: terminated by:分隔符,意思是以什么字符作為分隔符

enclosed by:字段括起字符

escaped by:轉義字符 lines terminated by:描述字段的分隔符,默認情況下是tab字符(\t) 當我們要導入到MySQL表中的文本文件具有以逗號','分隔的值或者可能與冒號‘:’,分號 ';' 之間的任何其他分隔符分隔時,應使用'FIELDS TERMINATED BY'選項。

最終語法如下: LOAD DATA INFILE 'path/to/file.csv'

INTO TABLE table_name

FIELDS TERMINATED BY ','

ENCLOSED BY '"'

LINES TERMINATED BY '\n'

IGNORE 1 ROWS;

我在剛開始導入的文件路徑格式如下:

load data infile 'C:\ProgramData\MySQL\MySQL Server8.0\Uploads\XXX.csv'

遇到錯誤:ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

通過查詢語句 show variables like '%secure%'; 查到--secure-file-priv--位置將要導入的文件放在--secure-file-priv--相應位置后依然出現1290錯誤,將網上的各種辦法逐一試過后發現是文件路徑書寫錯誤(汗。。。),最終通過如下語句成功導入數據:

歷時將近1個小時,雖然時間也不短,但是相較圖形界面引導導入而言導入速度更快。 最后再說一點,我在審核導入語句時曾用過 lines terminated by '\r\n'; 結果只能導入一行,那肯定是換行的問題,網友給的解釋是:如果已經在Windows系統中生成了文本文件,可能必須使用LINES TERMINATED BY ‘\r\n’來正確地讀取文件,因為Windows程序通常使用兩個字符作為一個行終止符。(我的理解就是如果導入的是txt文件,那就用lines terminated by '\r\n',否則就用lines terminated by '\n')

最后,希望以后我們都能高效的導入數據量大的數據文件。

總結

以上是生活随笔為你收集整理的mysql导入亿级数据_如何将上亿条大容量数据导入MYSQL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。