使用CPYFRMIMPF把以del格式的大資料拷貝到IBM i上的方法

來源:互聯網
上載者:User

文章結合作者的工作需求,以在 IBM i 上的性能HTTP://www.aliyun.com/zixun/aggregation/20522.html">測試資料拷貝為例,探討了使用 CPYFRMIMPF 把以 del 格式的大資料拷貝到 IBMi 上的方法,並對 LOB 資料的處理、提高拷貝效率等問題進行了探討。

IBM i(以前稱作 OS400,i5 OS 等)是一個集成性作業系統,其最大的特點就是系統自身內嵌了資料庫 DB2。 作業系統本身使用到了 DB2 一些功能和特性,而 DB2 也用到了系統本身的底層功能。 正因為作業系統與資料庫的這種緊密耦合關係,使得 IBM i 在零售領域、金融領域等具有很好的表現。

作者在實際工作過程中,需要搭建客戶的類比資料環境及購物場景,即測試環境需要包含大量的產品、促銷等資訊,然後類比大量使用者併發的訪問商店以及購物,進而進行效能測試工作。 其中類比資料的載入是效能測試的前提條件。 測試資料由專門的工具生成,資料本身可以匯出為 SQL 檔或者 DEL 檔的格式。 SQL 檔可以直接通過 db2 -tf 的方式導入到資料庫當中,但是處理效率低下,需要花費較多的時間導入測試資料;DEL 檔案格式的資料具有較好的處理效率,在 DB2 LUW 版本當中,可以使用類似于如清單 1 的命令將資料拷貝到資料庫當中:

清單 1. 使用 LOAD 命令導入資料

load from PX_POLICY.del of del modified by chardel` insert into PX_POLICY("PX_POLICY_ID","STOREENT_ID","STATUS", "NA ME","IMPLCLS","XMLPARAM","OPTCOUNTER");

但是 DB2 for i 並不支援 LOAD 命令,所以不能用這個方法來拷貝資料。 但是 IBM i 上提供了一個叫 CPYFRMIMPF 的 CL 命令具有類似的功能。

CPYFRMIMPF

簡介

CPYFRMIMPF(Copy From Import File)可以將原始檔案中的全部或者部分記錄拷貝到目的檔案中,具有 FROMSTMF、TOFILE、ERRLVL 等參數,具體資訊請參考 IBM i 資訊中心。 在作者的測試資料處理過程當中,主要用到了如下幾個關鍵參數:

表 1 CPYFRMIMPF 關鍵參數

參數 作用 示例 FROMSTMF 指定源 DEL 檔,可以使用絕對路徑或者相對路徑 FROMSTMF('.. /load/ACPLGPSUBS_0.del') TOFILE 指定目的檔案,即資料庫 schema 中的一個表,格式為 <schema 名稱 >/< 表的名稱 > TOFILE(demo120/ACPLGPSUBS ) ERRLVL 錯誤記錄數 ERRLVL(*NOMAX) RMVBLANK 移除原始檔案欄位中的首尾空白字元 RMVBLANK(*BOTH) RPLNullVAL(*FLDDFT) 替換源 DEL 檔中欄位為 Null 的值 RPLNullV AL(*FLDDFT) RCDDLM 記錄分隔符號 RCDDLM(*LF) STRDLM 字串分隔符號 STRDLM('\`') FLDDLM 記錄之間的分隔符號 FLDDLM(',')

使用

CPYFRMIMPF 命令的使用可以直接在綠屏以 CL 格式命令運行,也可以在 QSH 下命令。 由於作者在測試過程中有多個 DEL 檔需要拷貝到相應的資料表中,所以採用在 QSH 下使用的方法,命令如清單 2 所示:

清單 2 QSH 下執行 CPYFRMIMPF

system "CPYFRMIMPF FROMSTMF('.. /load/ACPLGPSUBS_0.del') TOFILE(demo120/ACPLGPSUBS) ERRLVL(*NOMAX) RMVBLANK(*BOTH) RPLNullVAL(*FLDDFT) RCDDLM(*LF) STRDLM('\`')"

這裡有一點需要注意的是清單 2 中的 DEL 檔用的相對路徑,而該路徑是相對於當前 QSH 路徑的,不是相對於根路徑。

使用 CPYFRMIMPF 拷貝資料最佳實踐

獲取表的短名稱

DB2 for i 的資料表的名稱不能超過 10 個字元,超過 10 個字元的名稱會以短名稱的格式在 IBM i 上進行表示(前 5 個字元為表的全名的前 5 個字元,後 5 個字元為 00001 開始的編號,比如作者處理的資料庫中的一個表 A TTRDICTGRP 的短名稱為 ATTRD00001)。 如果多個表格的前 5 個字元相同,那麼就只能通過後面的數位進行區分,所以在拷貝資料之前必須獲得每個長表的短名稱。 該名稱可以在 iSeries Navigator 中獲得,如圖 1 所示:

圖 1 表的短名稱

去除約束

上文闡述了使用 CPYFRMIMPF 來進行資料拷貝的命令的格式,但是在實際使用過程中,由於需要拷貝大量資料到同一個 schema 的不同表格當中,而表格之間又往往存在外鍵等約束,所以我們不但需要保證測試資料本身的準確性, 即資料之間不違反約束條件,而且在插入的過程中按照一定的先後順序。 這樣一來,無形之中就降低了資料拷貝的效率。 一種替代的方法就是在拷貝資料之前去掉所有的約束條件,在拷貝完成之後,再加上去除掉的約束條件,而資料本身的準確性由資料來源保證,同時可以在加上約束條件之後使用 EDTCPCST 來説明檢查是哪個表的哪個欄位違反了外鍵約束條件。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.