sqlldr 匯入大資料量資料

2021-08-10 22:28:45 字數 1922 閱讀 8973

最近在處理一些資料,資料量比較大的資料,記錄下使用方法和過程,以備日後檢視

如果使用insert插入超過1000條時間就有點長了(5、6分鐘)

使用plsql的text import 匯入8萬條耐心等一會也可以忍受,

但是我們要處理的是500萬條資料,嘗試了幾種方法,最後選擇了sqlldr

首先會有乙個資料檔案,這個資料檔案是文字型的 txt\csv\nul\del都沒關係,只要內容遵循一定規則,比如逗號分割和定長

在資料庫中新建乙個存放這些資料的表 如:

create table users(

user_id number,             --使用者 id

user_name varchar2(50),     --使用者名稱

login_times number,         --登陸次數

last_login              date--最後登入日期 );

在其中插入任意條資料,然後通過plsql匯出為csv檔案:users_data.csv

建立乙個控制檔案 users.ctl,內容如下:

---檔案開始

options (skip=1,rows=128) -- sqlldr 命令顯示的選項可以寫到這裡邊來,skip=1 用來跳過資料中的第一行,如果沒有引數此行可去掉

load data  infile    "/home/users_data.csv" --指定外部資料檔案,可以寫多個 infile "another_data_file.csv" 指定多個資料檔案 

badfile "/home/bad.log"  --指定壞資料和丟棄資料--的檔案,

truncate   --操作型別,用 truncate table 來清除表中原有記錄 還有

into   table users -- 要插入記錄的表

fields terminated     by","-- 資料中每列記錄用 "," 分隔   fields terminated by x'09'16進製制09

optionally enclosed by '"' -- 資料中每個欄位用 '"' 框起,比如欄位中有 "," 分隔符時

trailing nullcols --表的字段沒有對應的值時允許為空

(    virtual_column filler,   --這是乙個虛擬字段,用來跳過由 pl/sql developer 生成的第一列序號

--user_id number,   --欄位可以指定型別,否則認為是 character 型別, log 檔案中有顯示

user_id   "user_seq.nextval", --這一列直接取序列的下一值,而不用資料中提供的值

user_name   "'hi '||upper(:user_name)",--,還能用sql函式或運算對資料進行加工處理

login_times,

last_login     date"yyyy-mm-dd hh24:mi:ss"-- 指定接受日期的格式,相當用 to_date() 函式轉換 )

---檔案結束

在操作型別 truncate 位置可用以下中的一值:

insert     --為預設方式,在資料裝載開始時要求表為空

replace  --刪除舊記錄(用 delete from table 語句),替換成新裝載的記錄

truncate --刪除舊記錄(用 truncate table 語句),替換成新裝載的記錄

然後執行命令 sqlldr username/password@userdb control='/home/users.ctl'  --userdb為資料庫例項名

這個命令使用於在資料庫所在的伺服器上執行,如果資料庫和執行命令的不是乙個機器,即往遠端資料庫匯入資料,執行那個下列命令:sqlldr username/password@ip:port/userdb control='/home/users.ctl' 

imp匯入大資料量檔案

在使用exp imp將資料轉移時,由於現場的資料可能是海量,在使用exp匯出的時候,exp會匯出建表語句和表的內容,建表中有乙個引數initial,這個引數表示表的初始化的大小,預設是64k,而exp時,會根據表的大小動態的改變這個值,那麼在匯入的時候,會先建立這個表,而假如是海量資料,那麼建立表就...

大資料量mysql檔案匯入程式

phymyadmin data importer www.ebugs.org 用來快速mysql的大資料備份 使用前請首先按照 注釋修改要匯入的sql檔名 資料庫主機名 資料庫使用者名稱 密碼 資料庫名 同時將資料庫檔案和本文本一起ftp導 目錄,然後以web方式訪問此檔案即可 file name ...

大資料量演算法

給40億個不重複的unsigned int的整數,沒排過序的,然後再給乙個數,如何快速判斷這個數是否在那40億個數當中 位圖思想解法 include stdio.h include stdlib.h include memory.h define max num 4294967295 int mai...