資料庫幾十萬的資料量備份下來後,如果直接在乙個檔案中匯入到資料庫中,無法實現。於是就想著怎麼按行把資料檔案分割成小塊檔案操作。
仔細看了下linux的head和tail指令,發現很符合按行分割的要求。接下來就是如何設計乙個shell指令碼,自動完成分割工作了。
指令碼如下(無論資料量多大,分割成50000條乙個檔案):
divide.sh
#!/bin/bash
echo "please input the large file:"
read largefile
echo "please input the output file(will add '.unl' automaticlly):"
read outputfile
#each file index,begin with 1
index=1
#divide size,each size 50000
size=50000
eachsize=50000
#get the largefile size
filesize=`wc -l $largefile | awk ''`
echo "the large file size is $filesize."
#divide the large file to divided files, 50000 by 50000
while [ $size -lt $filesize ]
do tempfile=`echo "$outputfile$index.unl"`
echo "outputfile is made:$tempfile"
index=`expr $index + 1`
rm $tempfile
touch $tempfile
echo "head -$size $largefile | tail -$eachsize - > $tempfile"
`head -$size $largefile | tail -$eachsize - > $tempfile`
#next 50000
size=`expr $size + 50000`
done
#some oddment
size=`expr $size - 50000`
oddment=`expr $filesize - $size`
if [ $oddment -gt 0 ]; then
tempfile=`echo "$outputfile$index.unl"`
echo "outputfile is made:$tempfile"
rm $tempfile
touch $tempfile
echo "tail -$oddment $largefile > $tempfile"
`tail -$oddment $largefile > $tempfile`
fiecho "divide over!"
shell執行效果(以分割666666行記錄的mytable.unl資料庫匯出檔案為例):
linux /home/user123/test> ./divide.sh
please input the large file:
mytable.unl
please input the output file(will add '.unl' automaticlly):
test
the large file size is 666666.
outputfile is made:test1.unl
head -50000 mytable.unl | tail -50000 - > test1.unl
outputfile is made:test2.unl
head -100000 mytable.unl | tail -50000 - > test2.unl
outputfile is made:test3.unl
head -150000 mytable.unl | tail -50000 - > test3.unl
outputfile is made:test4.unl
head -200000 mytable.unl | tail -50000 - > test4.unl
outputfile is made:test5.unl
head -250000 mytable.unl | tail -50000 - > test5.unl
outputfile is made:test6.unl
head -300000 mytable.unl | tail -50000 - > test6.unl
outputfile is made:test7.unl
head -350000 mytable.unl | tail -50000 - > test7.unl
outputfile is made:test8.unl
head -400000 mytable.unl | tail -50000 - > test8.unl
outputfile is made:test9.unl
head -450000 mytable.unl | tail -50000 - > test9.unl
outputfile is made:test10.unl
head -500000 mytable.unl | tail -50000 - > test10.unl
outputfile is made:test11.unl
head -550000 mytable.unl | tail -50000 - > test11.unl
outputfile is made:test12.unl
head -600000 mytable.unl | tail -50000 - > test12.unl
outputfile is made:test13.unl
head -650000 mytable.unl | tail -50000 - > test13.unl
outputfile is made:test14.unl
tail -16666 mytable.unl > test14.unl
divide over!
最後不滿50000條的,單獨記錄到乙個新的檔案中。 imp匯入大資料量檔案
在使用exp imp將資料轉移時,由於現場的資料可能是海量,在使用exp匯出的時候,exp會匯出建表語句和表的內容,建表中有乙個引數initial,這個引數表示表的初始化的大小,預設是64k,而exp時,會根據表的大小動態的改變這個值,那麼在匯入的時候,會先建立這個表,而假如是海量資料,那麼建立表就...
大資料量的處理
其實這個問題老是在面試的時候提到 1。建立專門的彙總表 這個表一般是每天晚上做統計處理 建立索引 索引的話,插入和修改會變慢,也是只做統計原因之一 用來查詢,如果量非常大,那麼分表,還是大,那麼分庫,就是資料倉儲概念了 2。關聯表查詢 多表聯合查詢 的大資料,首先就是1 把多個表做成乙個統計表,或者...
大資料量mysql檔案匯入程式
phymyadmin data importer www.ebugs.org 用來快速mysql的大資料備份 使用前請首先按照 注釋修改要匯入的sql檔名 資料庫主機名 資料庫使用者名稱 密碼 資料庫名 同時將資料庫檔案和本文本一起ftp導 目錄,然後以web方式訪問此檔案即可 file name ...