1. 程式人生 > >DB2資料的匯入(Import) 匯出(Export)(Load)

DB2資料的匯入(Import) 匯出(Export)(Load)

資料的匯入

例七:把C盤根目錄下的org.txt檔案中的資料匯入到org表中
import from c:\org.txt of del insert into org

匯入命令和匯出命令的格式基本上處於對應的關係,import對應export,from對應to,檔名和檔案格式代表的含義相同,但是匯入命令支援ASC格式的檔案,而匯出命令不支援。另外,在匯出命令的最後是一個SQL語句,用於選擇要匯出的資料,而匯入命令最後不是SQL語句,而是插入資料的方式以及目標表名稱。

例八:從ASC格式檔案中匯入資料
import from  c:\org2.txt of asc method l(1 5,6 19,20 25,26 37,38 50) insert into org
其中 method l 子句用於指定文字檔案中每一個欄位的起始位置和終止位置,每個起始位置和終止位置間用空格分開,欄位之間用逗號分開。
除了l方法之外,還有n方法和p方法,下面會敘述。

例九:利用n方法匯入資料,並且建立新表。
首先匯出一個用例檔案:
export to d:\org.ixf of ixf method n(a,b,c,d,e) select * from org
這樣org.ixf檔案中有五列資料,對應的列名分別為a、b、c、d、e
然後在從該檔案中匯入資料到一個新表中
import from d:\org.ixf of ixf method n(d,e,b) replace_create into orgtest
該命令從檔案中選取三列匯入到表中,順序可以不按照檔案中原有的列的順序。replace_create方式的敘述見下。

插入方式有:
INSERT 方式——在表中現有資料的基礎之上追加新的資料。
INSERT_UPDATE 方式——這種方式只能用於有主鍵的表,如果插入的資料與原有資料主鍵不衝突,則直接插入,如果主鍵衝突,則用新的資料代替原有資料。
REPLACE 方式——先把表中現有的資料都刪除,然後向空表中插入資料。
REPLACE_CREATE 方式——表示如果表存在,則先把表中的資料都刪除,然後向空表中插入資料;如果表不存在,則先根據檔案中的欄位建立表,然後再向表中插入資料。這種方式只能把IXF格式的檔案中的資料插入到表中。

例十:利用p方法匯入資料
import from d:\org.ixf of ixf method p(4,5,2) replace into orgtest
該例子執行的效果和例九類似,只是把n方法換成了p方法,p方法後面的列表中指明列的序號即可,不需要指明列名。另外,此例中使用了replace方式插入資料,這會把表中現有的資料都刪除,然後向空表中插入資料。

例十一:關於空值的匯入
對於ixf格式的檔案,匯入空值非常方便,因為裡面已經記錄了空值的資訊。但是,對於ASC格式檔案就有一定的難度了,因為DB2會直接插入空格,而不是空值。為此,DB2提供了一個子句進行控制:NULL INDICATORS

import from  c:\org2.txt of asc MODIFIED BY nullindchar=# method l(1 5,6 19,20 25,26 37,38 50) NULL INDICATORS(0,0,0,0,38 ) replace into org

在這個例子中,NULL INDICATORS子句後面是一個列表,表示前面四個欄位都不會存在空值,而第五個欄位從38列開始,可能存在空值,而 MODIFIED BY nullindchar=# 子句表示在檔案中第五個欄位如果遇到 # 號,則表示為空值。

就說這些吧,拋磚引玉,希望大家補充,下一次談一談Load命令。
 
裝入(Load)

裝入命令格式與匯入類似,命令關鍵字是Load,但是後面的引數比匯入命令多的多,詳細用法可以自行參考DB2文件。

裝入與匯入類似,都是將輸入檔案中的資料移入到目標表中,二者的不同點將在例項中逐步解釋。

在裝入之前,目標表必須已經存在。

裝入的效能比匯入高,原因在後面結合例項詳細解釋。

裝入操作不記錄到日誌中,所以不能使用日誌檔案進行前滾操作。

裝入分為4個階段:
1. 裝入階段
在這個階段發生兩件事:資料儲存在表中,收集索引鍵並排序。在裝入時,DBA可以指定多長時間生成一致點。

它是裝入工具的檢查點。如果裝入在執行期間被打斷,它可以從最後一個一致點處開始繼續重新執行。

2. 構建階段
在構建階段,基於在裝入階段收集的索引鍵資訊建立索引。如果在構建階段發生錯誤,裝入工具就重啟,它將從構建階段開始處重新開始構建。

3. 在刪除階段,所有違反唯一或主鍵約束的行都被刪除並拷貝到一個異常表(如果在語句中指定相應選項)中。當輸入行被拒絕,訊息檔案中就生成訊息。

4. 索引拷貝階段
如果在裝入操作期間為索引建立指定了系統臨時表空間,並且選擇了 READ ACCESS 選項,該索引資料將從系統臨時表空間拷貝到原來的表空間。

裝入過程的所有四個階段都是操作的一部分,只有在所有的四個階段都完成之後,該裝入操作才算完成。在每個階段都將生成訊息,一旦其中的某個階段發生錯誤,這些訊息可以幫助DBA分析並解決問題。

匯入操作每次插入一行資料時都要檢查是否滿足約束條件,並且記入日誌檔案中。


下面我們看一些LOAD命令特有的功能,IMPORT命令也能做的就不再詳細說了。

例十二:從游標型別檔案中進行裝入
定義一個cursor
declare mycur cursor for select * from org
建立一個新表,結構與cursor相容
create table org2 like org
從cursor中裝入
load from mycur of cursor insert into org2

除了可以從cursor中裝入,還可以從檔案、管道、裝置中進行裝入。而匯入命令只能從檔案中匯入。



例十三:關於異常表
由使用者定義的異常表可以用於儲存不遵循唯一約束和主碼約束的行。如果裝入的時候沒有指定異常表,則違反唯一約束的行將被丟棄並且將不再有機會恢復或修改。
用SAMPLE資料庫中的STAFF表做實驗
1. 建立一個結構與STAFF表相同的表STAFF1
CREATE TABLE STAFF1 LIKE STAFF

2. 把STAFF表中的一部分資料插入到STAFF1中
INSERT INTO STAFF1 SELECT * FROM STAFF WHERE ID<=160

3. 再建立一個結構與STAFF1相同的表STAFFEXP,作為異常表
CREATE TABLE STAFFEXP LIKE STAFF1

4. 給該異常表新增一列,因為異常表和普通表相比,前面的結構都相同,就是最後多出一列或兩列(列名任意),第一列是時間戳型別,記錄異常記錄插入的時間,第二列是大文字型別(至少為32K大小),儲存導致該條記錄被拒絕的特定約束資訊。本例中只新增一個時間戳列。
ALTER TABLE STAFFEXP ADD COLUMN TIME TIMESTAMP

5. 為STAFF1表建立一個唯一索引
CREATE UNIQUE INDEX IDXSTAFF ON STAFF1(ID)

6. 先執行匯出命令做出一個文字檔案
EXPORT TO D:\STAFF.TXT OF DEL SELECT * FROM STAFF

7. 然後執行裝入命令把資料再裝入到STAFF1表中
LOAD FROM D:\STAFF.TXT OF DEL INSERT INTO STAFF1 FOR EXCEPTION STAFFEXP

由於表STAFF1中有唯一索引,所以會有一部分資料因為違反這個約束條件而不能插入到STAFF1表中,這些記錄就會插入到異常表STAFFEXP中。

注意一點,異常表必須自己先定義好,裝入命令不能夠自動生成異常表,如果找不到指定的異常表,就會報錯。



例十四:關於DUMP檔案
格式不正確的行會被拒絕。通過指定DUMPFILE檔案型別修飾符可以使這些被拒絕的記錄單獨放在指定的檔案裡。
用SAMPLE資料庫中的STAFF表做實驗
1. 建立一個結構與STAFF表相同的表STAFF1
CREATE TABLE STAFF1 LIKE STAFF

2. 把STAFF表中的一部分資料插入到STAFF1中
INSERT INTO STAFF1 SELECT * FROM STAFF WHERE ID<=160

3. 再建立一個結構與STAFF1相同的表STAFFEXP,作為異常表
CREATE TABLE STAFFEXP LIKE STAFF1

4. 給該異常表新增一列
ALTER TABLE STAFFEXP ADD COLUMN TIME TIMESTAMP

5. 為STAFF1表建立一個唯一索引
CREATE UNIQUE INDEX IDXSTAFF ON STAFF1(ID)

6. 先執行匯出命令做出一個文字檔案
EXPORT TO D:\STAFF.TXT OF DEL SELECT * FROM STAFF
到D盤上開啟STAFF.TXT檔案,把第一列等於320的行替換為:"abcf","aaa","sdfg"

7. 然後執行裝入命令把資料再裝入到STAFF1表中
LOAD FROM D:\STAFF.TXT OF DEL MODIFIED BY DUMPFILE=d:\dump INSERT INTO STAFF1 FOR EXCEPTION STAFFEXP

裝入的結果報告中會有如下一條:
SQL3118W  在行 "32" 列 "1" 中的欄位值不能轉換為 SMALLINT 值,但是目標列不可為空。未裝入該行。
SQL3185W  當處理輸入檔案的第 "32" 行中的資料時發生先前的錯誤。

開啟D盤的dump.000檔案,會看到造成異常的那一行資料:"abcf","aaa","sdfg"

通過這個例子,我們可以理解,如果一行資料的格式不正確,在裝入的時候會遭到拒絕,該行記錄會放到DUMP檔案中;而如果資料格式正確,但是不滿足表的約束條件,該行記錄會放到異常表中。



例十五:限制裝入行數
用ROWCOUNT選項可以指定從檔案開始處裝入的記錄數
LOAD FROM D:\STAFF.TXT OF DEL ROWCOUNT 3 INSERT INTO STAFF1



例十六:出現警告資訊時強令裝入操作失敗
在某些情況下,檔案中的資料必須全部成功輸入到目標表中才算成功,即使有一條記錄出錯也不行。在這種情況下,可以使用WARNINGCOUNT選項。

到D盤上開啟STAFF.TXT檔案,把第一列等於320的行替換為:"abcf","aaa","sdfg"

LOAD FROM D:\STAFF.TXT OF DEL WARNINGCOUNT 1 INSERT INTO STAFF1

執行結果包含下面的警告:
SQL3118W  在行 "32" 列 "1" 中的欄位值不能轉換為 SMALLINT值,但是目標列不可為空。未裝入該行。
SQL3185W  當處理輸入檔案的第 "32" 行中的資料時發生先前的錯誤。
SQL3502N  實用程式遇到了 "1" 個警告,它超過了允許的最大警告數。

此時無法對錶STAFF1進行操作,例如
SELECT * FROM STAFF1
會返回:
ID     NAME      DEPT   JOB   YEARS  SALARY    COMM
------ --------- ------ ----- ------ --------- ---------
SQL0668N  由於表 "USER.STAFF1" 上的原因程式碼 "3",所以不允許操作。
SQLSTATE=57016

原因是:表處於“裝入掛起”狀態。對此表的先前的 LOAD 嘗試失敗。在重新啟動或終止 LOAD 操作之前不允許對錶進行存取。

解決方法為:通過分別發出帶有 RESTART 或 TERMINATER 選項的 LOAD 來重新啟動或終止先前失敗的對此表的 LOAD 操作。

包含TERMINATER的LOAD命令可以終止裝入程序,使目標表恢復正常可用狀態:
LOAD FROM D:\STAFF.TXT OF DEL TERMINATE INTO STAFF1

包含RESTART的LOAD命令可以在原始檔修改正確的時候使用,使裝入程序重新開始:
LOAD FROM D:\STAFF.TXT OF DEL RESTART INTO STAFF1



例十七:防止產生警告資訊
使用NOROWWARNINGS檔案型別修飾符可以禁止產生警告資訊,當裝入過程可能出現大量警告資訊,而使用者對此又不感興趣的時候,可以使用該選項,這樣可以大大提高裝入的效率

到D盤上開啟STAFF.TXT檔案,把第一列等於320的行替換為:"abcf","aaa","sdfg"

LOAD FROM D:\STAFF.TXT OF DEL MODIFIED BY NOROWWARNINGS INSERT INTO STAFF1

執行完的結果中,第32行出錯,該行無法裝入,但是不產生警告資訊。



例十八:生成統計資料
使用STATISTICS選項可以在裝入的過程中生成統計資料,這些統計資料可以供優化器確定最有效的執行SQL語句的方式。
可以對錶和索引產生不同詳細程度的統計資料:

① 對錶和索引產生最詳細的統計資料:
LOAD FROM D:\STAFF.TXT OF DEL REPLACE INTO STAFF1 STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL

② 對錶和索引都產生簡略的統計:
LOAD FROM D:\STAFF.TXT OF DEL REPLACE INTO STAFF1 STATISTICS YES AND INDEXES ALL

其它組合可以參考DB2文件。

注意:STATISTICS選項只能和REPLACE相容,與INSERT選項不相容。

另外,通過STATISTICS選項做完統計,我們看不到任何直接的結果,如果想檢視其結果,需要到系統表中自己查詢。



例十九:解除檢查掛起狀態
1. 連線到SAMPLE資料庫上:
Connect to sample

2. 建立一個結構與staff表相同的表:
CREATE TABLE STAFF1 LIKE STAFF

3. 給該表新增一個檢查約束:
alter table staff1 add constraint chk check(dept<100)

4. 到D盤上開啟STAFF.TXT檔案,把最後一行資料的第三列改為150,這樣該條資料就不滿足第3步加上的檢查約

束條件了,然後用Load命令從檔案中裝入資料到staff1表中:
LOAD FROM D:\STAFF.TXT OF DEL INSERT INTO STAFF1

5. 此時執行查詢命令:
Select * from staff1
會得到錯誤資訊:
SQL0668N  由於表 "USER.STAFF1" 上的原因程式碼 "1",所以不允許操作。
SQLSTATE=57016
原因是裝入時有資料違反了檢查約束,造成表處於檢查掛起狀態。

6. 解除表的檢查掛起狀態,使用:
set integrity for staff1 check immediate unchecked
再次執行查詢命令:
Select * from staff1
發現表可以正常使用了,其中的違反檢查規則的資料也存在。



例二十:效能因素
在從檔案向表匯入資料的時候,當資料量特別大的情況下,裝入命令會明顯體現出優勢,原因是它不像匯入命令每次插入一行,並且在每行都要檢查是否滿足約束條件,裝入命令從輸入檔案讀出資料構建頁,把這些頁直接寫入資料庫,並且在每一行資料裝入時不判斷是否滿足約束,另外裝入命令不寫日誌,所有這些因素都導致裝入的效率高於匯入。

另外,裝入命令還有一些選項可以控制性能因素:
1. COPY YES/NO和Nonrecoverable
① Nonrecoverable(不可恢復的):指定裝入操作不可恢復,並且不能由後續的前滾操作恢復。前滾操作忽略事務並且標記正在裝入資料的表為“無效”。

② Copy No(預設選項):在這種情況下,如果表所在資料庫的歸檔日誌處於啟用狀態,則裝入完成後,表所在的表空間將處於備份掛起狀態,直到資料庫或表空間備份完畢,該表空間才成為可寫表空間。原因是裝入操作造成的變化沒有被記錄,所以要恢復裝入操作完成後發生的故障,備份資料庫或表空間是必要的。

③ Copy Yes:在這種情況下,如果資料庫的歸檔日誌啟用,裝入操作的改變將被儲存到磁帶、目錄或TSM伺服器,並且表空間將不再處於備份掛起狀態。

2. Fastparse
該檔案型別修飾符用於減少資料檢查次數。它只能用於在資料已知正確的情況下,尤其適用於DEL和ASC型別的檔案。

3. Anyorder
如果SAVECOUNT選項沒有使用,該引數允許不遵照輸入檔案中的資料順序進行裝入,在SMP(對稱多處理機)系統上CPU_PARALLELISM選項大於1的時候,該引數會提高裝入的效能。

4. Data Buffer
該引數用於指定從堆疊分配得到的4K大小的記憶體頁面的數目,作為裝入的內部緩衝區,指定一個大緩衝區有助於提高裝入的效能。

5. CPU_PARALLELISM
該選項只能用於SMP系統上,可以指示使用多少程序或執行緒解析、轉換、格式化資料。

6. Disk_Parallelism
該選項指定寫資料到磁碟的程序或執行緒的數目。

相關推薦

DB2資料移動:匯入Import匯出Export載入Load

目錄 檔案的格式  DB2中的資料移動,包括:  1. 資料的匯入(Import)  2. 資料的匯出(Export)  3. 資料的載入(Load)  匯入和載入都是利用DB2的相關命令把某種格式的檔案中的資料儲存到資料庫中的表中;匯出是指把DB2資料庫的

DB2資料匯入Import 匯出ExportLoad

資料的匯入 例七:把C盤根目錄下的org.txt檔案中的資料匯入到org表中 import from c:\org.txt of del insert into org 匯入命令和匯出命令的格式基本上處於對應的關係,import對應export,from對應to,檔名和檔案格式代表的含義相同,但是匯入命令支

Drupal 7 節點資料Node匯入/匯出Import/Export

Node export  http://drupal.org/project/node_export Views  http://drupal.org/project/views Views Excel Export  http://drupal.org/project/viewsexportxls

藍的成長記——追逐DBA1:奔波於路上,挺進山東 藍的成長記——追逐DBA3:古董上操作,資料匯入匯出成了問題 藍的成長記——追逐DBA8:重拾SP報告,回憶oracle的STATSPACK實驗 藍的成長記— —追逐DBA9:國慶漸去,追逐DBA,新規劃,新啟程

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

使用O2OA二次開發搭建企業辦公平臺平臺部署篇:伺服器備份和資料匯入匯出

  本部落格為O2OA系列教程、O2OA使用手冊,教程目錄和各章節天梯將在連載完後更新。 使用O2OA二次開發搭建企業辦公平臺(一)平臺部署篇:平臺下載和部署 使用O2OA二次開發搭建企業辦公平臺(二)平臺部署篇:埠衝突和伺服器埠配置 使用O2OA二次開發搭建企業辦公平

R資料匯入匯出: read.table()和read.csv()的區別

之前也參考過一些資料,雖然是這麼簡單的兩個buildin,還是仔細對比了一下,我有兩張txt,都是從cube中匯出的,就意味著每一列的列數是不一樣的。R語言官方文件中有這樣一句話不知道大家注意到了沒有: 意思是說,R語言對於匯入的格式要求非常嚴格,可以說是不靈活的;簡而言之就是更希望的是格式在外部編輯好

資料之hbase --- 匯出Hbase的表文件到HDFS,Hbase Bulk Load Hbase,MySQL資料通過MR匯入到Hbase表中

一、匯出Hbase的表文件到HDFS -------------------------------------------------------------------------- 1.複製hbase的jar檔案和metrices-core-xxx.jar檔案到

JAVA實現資料庫資料匯入/匯出到ExcelPOI技術

準備工作: 1.匯入POI包:POI下載地址:http://download.csdn.net/detail/zxm1306192988/9522142(重要) 如下 2.匯入匯出到Excel工具類ExcelUtil.java,封裝了POI對Excel的操作 pa

MongoDB學習資料匯入匯出及備份恢復

  這幾天想著公司要用MongoDB,自然就要用到資料匯入匯出,就自己學習了一下。   在Mongo學習(二)中就講到了在bin目錄下有一些工具,本篇就是使用這些工具進行資料的匯入匯出及備份恢復。   注意:以下命令均在cmd命令列中輸入,匯出及備份未指

SpringMVC 實現POI讀取Excle檔案中資料匯入資料庫上傳匯出資料庫中資料到Excle檔案中下載

package com.shiliu.game.utils; import java.io.OutputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import

Hive之DML資料匯入資料匯出操作

總結: 資料的匯入 1)hdfs或者本地檔案匯入使用  load 或者 建立資料庫的同時指定檔案位置 location 2)從已有hive資料庫中表匯入相應的資料    使用       as   

建立表空間、建立表子查詢建立表、表的約束、事務、資料庫物件檢視、序列、索引、同義詞、PLSQL程式設計、if,迴圈資料匯入匯出備份

DDL語句管理表 DML管理表資料 1)語法: 建立 和 刪除 表空間 / 建立使用者 create tablespace 表空間的名稱 datafile '檔案路徑' //這個檔案是儲存在伺服器端的電腦上的

sqoop學習2資料匯入匯出命令

最近學習了下這個導資料的工具,但是在export命令這裡卡住了,暫時排不了錯誤。先記錄學習的這一點吧sqoop是什麼sqoop(sql-on-hadoop):是用來實現結構型資料(如關係型資料庫)和hadoop之間進行資料遷移的工具。它充分利用了mapreduce的並行特點以

Falcon——Falcon資料匯入匯出

綜述 Falcon提供了週期性的將源資料從外部資料庫(資料庫,drop boxes etc)匯入到Hadoop上以及將講過Hadoop運算的資料匯出到外部的資料庫。 在至今所有的版本中,Falcon僅僅支援關係型資料庫(Mysql,Oracle等)講過JDB

Oracle資料Dump匯出匯入

*該匯入匯出方式完全適用於分割槽表* 匯出、匯入前準備 注:使用sys、system等系統使用者操作! 1)建立DIRECTORY目錄物件 CREATE DIRECTORY exp_dir AS '/oracle/db/zone'; --存放dm

Oracle11G的資料庫資料匯入匯出由11g上匯出匯入10g資料庫等

常用命令 EXPDP USERID=’scott/[email protected] as sysdba’ schemas=scott directory=DATA_PUMP_DIR dumpfile=dp.dmp logfile=dp.log ve

laravel excel安裝使用,匯入匯出資料寫入檔案

1、簡介 Laravel Excel 在 Laravel 5 中整合 PHPOffice 套件中的 PHPExcel,從而方便我們以優雅的、富有表現力的程式碼實現Excel/CSV檔案的匯入和匯出。 本文我們將在Laravel中使用Laravel Excel簡單實現E

通過資料泵expdp、impdp方式備份與還原匯出匯入Oracle資料庫

前言備份還原oracle資料庫的方式有很多種,本文只講解使用expdp、impdp資料泵方式備份與還原(恢復)資料庫,此種方式可以匯出/匯入資料庫表以及表中的資料。請自行修改目錄路徑,否則出現錯誤別怪我哦~一、備份step1:使用system登入oracle開啟DOS命令列介

利用sqoop將hive資料匯入Oracle中踩的坑

教程很多,這裡只說踩過的坑 1.下載sqoop時,還得下一個bin的包,拿到sqoop-1.4.6.jar 的包,放到hadoop的lib目錄下 2.匯入oracle,執行程式碼時,使用者名稱和表名必須大寫!且資料庫建表時表名必須大寫!  示例程式碼: sqoop expo

JAVA:Excel匯入匯出詳解3--匯出

Excel匯出 一、設定查詢條件 注意:無法通過Ajax下載 jsp程式碼 <form class="col-sm-2" action="/manage/order/download" method="post" onsubmit="checkForm()"