從文字匯入海量資料(informix-dbload)
informix 從文字匯入海量資料(informix load)
從文字匯入資料到informix資料一般使用SQL語句:
load from file.dat insert into tablename;
但當匯入的資料有好幾百萬甚至上千萬條時用上面的方法產生大鎖表,及至資料庫鎖不夠,導致長事務無法匯入。
一個解決的辦法是使用dbload命令,以下為dbload的引數說明:
---------------------------------------------------------------------
dbload --help
DBLOAD Load Utility INFORMIX-SQL Version 11.50.FC5
Usage:
dbload [-d dbname] [-c cfilname] [-l logfile] [-e errnum] [-n nnum]
[-i inum] [-s] [-p] [-r | -k] [-X]
-d database name
-c command file name
-l bad row(s) log file
-e bad row(s) # before abort
-s syntax error check only
-n # of row(s) before commit
-p prompt to commit or not on abort
-i # or row(s) to ignore before starting
-r loading without locking table
-X recognize HEX escapes in character fields
-k loading with exclusive lock on table(s)
---------------------------------------------------------------------
下面舉一簡單例子:
資料庫名:dbsname
load命令檔名:load.sh
錯誤日誌檔名:error.log
每次提交的資料條數:100000
資料檔名:loadfile.txt
資料欄位分隔符: "|"
每行資料的欄位資料: 14
要插入的資料表名:prepay
應用命令如下:
dbload -d DBNAME -c load.sh -l error.log -n 100000;
load.sh 檔案內容:load.sh可以建立多條資料檔案匯入
-----------------
file "loadfile.txt" delimiter "|" 14 ;
insert into tablename;
file "loadfile1.txt" delimiter "|" 16 ;
insert into tablename1;
-----------------
附shell指令碼:
---------------------------------------------------------------------------------
#!/bin/ksh
#===========================================================================
#filename:dbload.sh
#功能:
#從檔案匯入海量資料到informix資料庫中
#主要是解決海量資料匯入問題,當直接使用形如:
#load from loadfile.txt insert into tablename;
#匯入資料時,如果資料超過幾百萬條則會使快取被充滿而無法匯入
#input: nameDB nameTable dataFile
#注意:
#1.程式需要informix load 支援
#2.資料檔案第行應以"|"結尾
#===========================================================================
#引數輸入
if [ $# -ne 3 ];then
cat << EOF
Usage: $0 nameDB nameTable dataFile
nameDB 資料庫名
nameTable 資料庫表名
dataFile 即將匯入資料庫的資料檔案
EOF
exit 1
fi
nameDB="$1" #資料庫名
nameTable="$2" #資料庫表名
dataFile="$3" #即將匯入資料庫的資料檔案
if [ ! -f "$dataFile" ];then
echo "<ERROR>資料檔案[$dataFile]不存在!" | tee -a $errLog
exit 1
fi
tmpStr0=`echo $dataFile | sed "s/\//_/g"`
errLog="${tmpStr0}_E.log" #日誌
:>$errLog
delimStr="|" #資料檔案中資料分隔符
commitNum=100000 #一次提交的資料條數
loadCMDFile="load$$.cmd" #load命令檔案
tmpFile="`basename $dataFile`.tmp" #臨時檔案
trap "myExit" 0 1 2 3 9 11 15
myExit()
{
#程式退出前刪除臨時檔案
#刪除load命令檔案
rm -f $loadCMDFile
rm -f $tmpFile
#如果日誌檔案是空的刪除
if [ ! -f "$errLog" ];then
return
fi
_tmpNum="`cat $errLog | wc -c`"
_tmpNum="`expr $_tmpNum`"
if [ $_tmpNum -eq 0 ];then
rm -f $errLog
fi
}
lineNum="`cat $dataFile | wc -l`" #資料行數
lineNum="`expr $lineNum`"
if [ $lineNum -eq 0 ];then
echo "<ERROR>資料檔案[$dataFile]是空的!" | tee -a $errLog
exit 1
fi
#資料檔案資料列數
colNum=`head -n1 $dataFile | awk -F"|" '{print NF}'`
#資料檔案中的資料行最後有一個"|"
colNum=`expr $colNum - 1`
cat << EOF > $loadCMDFile
file "$dataFile" delimiter "$delimStr" $colNum;
insert into $nameTable;
EOF
if [ ! -f "$loadCMDFile" ];then
echo "<ERROR>load命令檔案[$loadCMDFile]不存在!" | tee -a $errLog
exit 1
fi
:> $tmpFile
dbload -d $nameDB -c $loadCMDFile -l $errLog -n $commitNum >> $tmpFile 2>&1
#| tee -a $tmpFile 2>&1
#cat $tmpFile
echo "[提示]資料檔案行數: $lineNum"
#獲取匯入的資料條數
grepStr="Table $nameTable had "
tmpStr=`grep "$grepStr" $tmpFile`
insertNum=0
if [ "$tmpStr" != "" ];then
for str in $tmpStr
do
tmpStr2=`echo $str | grep "^[0-9]*$"`
if [ "$tmpStr2" = "" ];then
continue
else
insertNum=`expr $str`
echo "[提示]總計匯入條數: $insertNum"
errNum=` expr $lineNum - $insertNum `
if [ $errNum -gt 0 ];then
echo "[ERROR]匯入失敗條數: $errNum"
exit 1
else
echo "[OK]匯入成功!"
fi
break
fi
done
else
echo "[ERROR]匯入失敗條數: $lineNum"
exit 1
fi
從文字匯入資料到informix資料一般使用SQL語句:
load from file.dat insert into tablename;
但當匯入的資料有好幾百萬甚至上千萬條時用上面的方法產生大鎖表,及至資料庫鎖不夠,導致長事務無法匯入。
一個解決的辦法是使用dbload命令,以下為dbload的引數說明:
---------------------------------------------------------------------
dbload --help
DBLOAD Load Utility INFORMIX-SQL Version 11.50.FC5
Usage:
dbload [-d dbname] [-c cfilname] [-l logfile] [-e errnum] [-n nnum]
[-i inum] [-s] [-p] [-r | -k] [-X]
-d database name
-c command file name
-l bad row(s) log file
-e bad row(s) # before abort
-s syntax error check only
-n # of row(s) before commit
-p prompt to commit or not on abort
-i # or row(s) to ignore before starting
-r loading without locking table
-X recognize HEX escapes in character fields
-k loading with exclusive lock on table(s)
---------------------------------------------------------------------
下面舉一簡單例子:
資料庫名:dbsname
load命令檔名:load.sh
錯誤日誌檔名:error.log
每次提交的資料條數:100000
資料檔名:loadfile.txt
資料欄位分隔符: "|"
每行資料的欄位資料: 14
要插入的資料表名:prepay
應用命令如下:
dbload -d DBNAME -c load.sh -l error.log -n 100000;
load.sh 檔案內容:load.sh可以建立多條資料檔案匯入
-----------------
file "loadfile.txt" delimiter "|" 14 ;
insert into tablename;
file "loadfile1.txt" delimiter "|" 16 ;
insert into tablename1;
-----------------
附shell指令碼:
---------------------------------------------------------------------------------
#!/bin/ksh
#===========================================================================
#filename:dbload.sh
#功能:
#從檔案匯入海量資料到informix資料庫中
#主要是解決海量資料匯入問題,當直接使用形如:
#load from loadfile.txt insert into tablename;
#匯入資料時,如果資料超過幾百萬條則會使快取被充滿而無法匯入
#input: nameDB nameTable dataFile
#注意:
#1.程式需要informix load 支援
#2.資料檔案第行應以"|"結尾
#===========================================================================
#引數輸入
if [ $# -ne 3 ];then
cat << EOF
Usage: $0 nameDB nameTable dataFile
nameDB 資料庫名
nameTable 資料庫表名
dataFile 即將匯入資料庫的資料檔案
EOF
exit 1
fi
nameDB="$1" #資料庫名
nameTable="$2" #資料庫表名
dataFile="$3" #即將匯入資料庫的資料檔案
if [ ! -f "$dataFile" ];then
echo "<ERROR>資料檔案[$dataFile]不存在!" | tee -a $errLog
exit 1
fi
tmpStr0=`echo $dataFile | sed "s/\//_/g"`
errLog="${tmpStr0}_E.log" #日誌
:>$errLog
delimStr="|" #資料檔案中資料分隔符
commitNum=100000 #一次提交的資料條數
loadCMDFile="load$$.cmd" #load命令檔案
tmpFile="`basename $dataFile`.tmp" #臨時檔案
trap "myExit" 0 1 2 3 9 11 15
myExit()
{
#程式退出前刪除臨時檔案
#刪除load命令檔案
rm -f $loadCMDFile
rm -f $tmpFile
#如果日誌檔案是空的刪除
if [ ! -f "$errLog" ];then
return
fi
_tmpNum="`cat $errLog | wc -c`"
_tmpNum="`expr $_tmpNum`"
if [ $_tmpNum -eq 0 ];then
rm -f $errLog
fi
}
lineNum="`cat $dataFile | wc -l`" #資料行數
lineNum="`expr $lineNum`"
if [ $lineNum -eq 0 ];then
echo "<ERROR>資料檔案[$dataFile]是空的!" | tee -a $errLog
exit 1
fi
#資料檔案資料列數
colNum=`head -n1 $dataFile | awk -F"|" '{print NF}'`
#資料檔案中的資料行最後有一個"|"
colNum=`expr $colNum - 1`
cat << EOF > $loadCMDFile
file "$dataFile" delimiter "$delimStr" $colNum;
insert into $nameTable;
EOF
if [ ! -f "$loadCMDFile" ];then
echo "<ERROR>load命令檔案[$loadCMDFile]不存在!" | tee -a $errLog
exit 1
fi
:> $tmpFile
dbload -d $nameDB -c $loadCMDFile -l $errLog -n $commitNum >> $tmpFile 2>&1
#| tee -a $tmpFile 2>&1
#cat $tmpFile
echo "[提示]資料檔案行數: $lineNum"
#獲取匯入的資料條數
grepStr="Table $nameTable had "
tmpStr=`grep "$grepStr" $tmpFile`
insertNum=0
if [ "$tmpStr" != "" ];then
for str in $tmpStr
do
tmpStr2=`echo $str | grep "^[0-9]*$"`
if [ "$tmpStr2" = "" ];then
continue
else
insertNum=`expr $str`
echo "[提示]總計匯入條數: $insertNum"
errNum=` expr $lineNum - $insertNum `
if [ $errNum -gt 0 ];then
echo "[ERROR]匯入失敗條數: $errNum"
exit 1
else
echo "[OK]匯入成功!"
fi
break
fi
done
else
echo "[ERROR]匯入失敗條數: $lineNum"
exit 1
fi
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-2131475/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 將資料從文字匯入到mysql(轉)MySql
- SQL Server海量資料匯入方法SQLServer
- SQL Server海量資料匯入的方法SQLServer
- 大文字資料,匯入匯出到資料庫資料庫
- Redis批量匯入文字資料Redis
- 將informix匯出的文字資料匯入oracle資料庫ORMOracle資料庫
- SQL Server海量資料匯入最快方法的詳解SQLServer
- 使用sqlloader向oracle匯入文字資料SQLOracle
- 使用oracle sqlldr匯入文字資料的例子OracleSQL
- 海量資料遷移之使用分割槽並行切分匯入並行
- Excel表的一些資料應用(從txt文字匯出,匯入到Excel表)薦Excel
- 使用FSO把文字資訊匯入資料庫 (轉)資料庫
- java 從EXCEL匯入到資料庫JavaExcel資料庫
- 從Excel到匯入MYSQL資料庫ExcelMySql資料庫
- 使用sqlldr匯入文字資料到oracleSQLOracle
- 如何把資料從Mysql匯入到GreenplumMySql
- windows下把資料從oracle匯入hbaseWindowsOracle
- Oracle:從SQL檔案批量匯入資料OracleSQL
- 資料庫 MySQL 資料匯入匯出資料庫MySql
- 線上文字實體抽取能力,助力應用解析海量文字資料
- 從零自學Hadoop(16):Hive資料匯入匯出,叢集資料遷移上HadoopHive
- 從零自學Hadoop(17):Hive資料匯入匯出,叢集資料遷移下HadoopHive
- 資料泵匯出匯入
- Oracle 資料匯入匯出Oracle
- mysql資料匯入匯出MySql
- mysql資料匯出匯入MySql
- Oracle資料匯入匯出Oracle
- 從 Neo4j 匯入 Nebula Graph 實踐見 SPark 資料匯入原理Spark
- 第四節:海量資料匯出到Excel、百萬Excel匯入到DB、秒級/分鐘級排行版Excel
- 如何用Python從海量文字抽取主題?Python
- sqlserver匯入匯出文字檔案SQLServer
- 把TXT文字匯入SQLServer 出錯:資料轉換失敗SQLServer
- 文字檔案用sqlldr工具匯入到oracel資料庫中SQL資料庫
- MySQL入門--匯出和匯入資料MySql
- 資料匯入SQLLDRSQL
- 將資料匯入kudu表(建立臨時hive表,從hive匯入kudu)步驟Hive
- sqoop資料匯入匯出OOP
- 資料匯入匯出EXP/IMP