主頁 > 知識庫 > 數據庫 > Oracle >

基于Oracle的大數據導入方案探索(3)

來源:中國IT實驗室 作者:佚名 發表于:2013-07-23 17:45  點擊:
(1)定義需要導入的格式化數據文件路徑,可以是CSV文件或者TXT文本文件; (2)定義導入數據庫的方式為append,需要插入數據的表名為CZDS_CABIN; (3)定義數據間的分隔符為逗號,此處,還可以定義更多的控制命令

(1)定義需要導入的格式化數據文件路徑,可以是CSV文件或者TXT文本文件;  (2)定義導入數據庫的方式為append,需要插入數據的表名為CZDS_CABIN;
  (3)定義數據間的分隔符為逗號,此處,還可以定義更多的控制命令,比如是否允許插入空數據命令trailing nullcols等等。
  (4)定義導入數據的對應的字段。這里所列的字段要與數據文件中每行數據中數據對應的列一致,因為SQLLOADER是按照這個順序對數據進行 插入的。其次,還有個值得注意的地方,在列名的后面可以用雙引號定義導入后數據的格式。SQLLOADER導入數據時區分格式的,當插入數字和字符類型數 據時可以根據文本進行自動轉換,但是當插入數據是時間類型時,需要在此處定義格式轉換,利用to_date方法將字符轉化為日期再執行插入。同時,利用這 個控制,可以實現對插入數據的格式化,比如利用lpad進行左填充等等,這也是SQLLOADER相對靈活的地方。
  第三步,通過SQLLOADER命令執行數據導入。
  這里的SQLLOADER命令是一個命令行命令,需要在JAVA程序中執行CMD程序來調用。
  Process process = null;
  try {
  process = java.lang.Runtime.getRuntime().exec(cmd);
  } catch (Exception e) {
  e.printStackTrace();
  }
  Cmd就是需要執行的SQLLOADER命令。SQLLOADER命令如下:
  sqlldr userid=mrl/mrl123456 control=e:\\test\\control1.txt log=aa.log  bad=bad.bad direct=true parallel=true
  Userid指的是本地數據庫的用戶名和密碼,不正確將連接不上數據庫。
  Control的值是我們之前生成的控制文件路徑,命令將會執行該控制文件。
  Log:這里定義了導入的日志文件路徑。
  Bad:當導入失敗時,該文件里存放了沒有成功導入的數據記錄。
  Direct:開啟直接導入路徑模式。
  Parallel:開啟并發導入模式。
  在程序中執行此命令后,通過process.waitFor()方法來等待命令執行的返回,若返回值為0則說明程序正常結束,數據導入成功;如返回1,則說明數據導入中出現異常,需要排查日志文件,數據導入失敗。
  利用SQLLOADER執行數據導入的缺點在于其對數據文件格式要求的嚴格以及其只能導入本地數據庫,而無法執行遠程導入,且導入數據只能通過 閃存回滾,存在風險性。但其優點又很明顯,導入數據速度非常快,通過測試結果顯示,導入40萬數據僅用了7-8秒,較之前額方法可謂一個飛躍,這也許是其 贏得大家一致認可的原因所在。
  篇末,通過這次對數據導入功能實現方案的探索,我學習到了很多知識和技巧,對于數據導入的實現原理也有了自己的認識,也希望能和大家探討交流。

有幫助
(0)
0%
沒幫助
(0)
0%
31选7什么时候开奖