sqoop使用,從hive向oracle匯入資料
author: lf
sqoop export 使用說明
--export-dir
和 (--table
和--call
中的一個)是必須的。
指定了將要填充的表(或將要呼叫的儲存過程),以及hdfs包含資源資料的目錄
--columns
預設將查詢出表中所有的欄位。通過這個引數可以選擇列的子集並控制它們的順序,使用逗號分割,例如:–columns “col1,col2,col3”。
注意,columns引數中不能包含需要預設值的列以及允許空值的列
--num-mapper
或--m
預設Sqoop使用四個任務並行處理。這可能不是最優的,可以根據實驗的實際情況,進行設定。
該設定控制map的任務數(使用的並行程度)。
--direct
一些資料提供了直接模式,這種模式可能比標準的JDBC模式效能更好
--input-null-string
和--input-null-non-string
是可選的
如果--input-null-string
沒有指定,那麼對於字元型別的列,字串“null”將被解釋為null;
如果--input-null-non-string
沒有指定,那麼對於非字元型別的列,字串"null"和空字串將被解釋為null;
注意:對於非字元型別的列,空字元傳總是被解釋為null。
--staging-table
Sqoop將一個匯出過程切分成多個事務,一個失敗的匯出作業,可能會導致部分的資料提交到資料庫中,這可能會由於插入衝突導致後續的任務失敗,或者導致資料重複。
--staging-table
--clear-staging-table
為了使用分段功能,必須提前建立建立一個階段表(Staging table)去執行匯出的job。這個表的結構必須和目標表的結構相同。在執行匯出任務之前,這個包必須為空,或者指定--clear-staging-table
,
在匯出任務執行前Sqoop將刪除階段表(Staging table)中的所有資料。
注意:直接匯出(`--direct`)並不總是支援將資料推入到目標表之前的分段資料。當使用`--update-key`選項(用於更新現有選項)呼叫匯出,或者使用儲存過程插入資料是,也是不支援的。
sqoop-export
新增新的記錄到一張表中,預設情況下,每一個輸入記錄將被轉化成insert語句,新增一行到目標資料庫的目標表中。
如果目標表中包含約束(例如:主鍵)並且已經存在資料,必須小心,避免將要插入的資料違背了約束。如果一條插入語句失敗,整個匯入過程就失敗了。
這個模式主要用於向新表或者空表中插入資料。
--update-key
如果使用這個引數,sqoop將修改已經存在的資料。每一條輸入記錄,將被看做update語句,修改已經存在的行。
語句修改的行,由--update-key
後面指定的列名決定。例如:
資料庫的表:
CREATE TABLE foo(
id INT NOT NULL PRIMARY KEY,
msg VARCHAR(32),
bar INT);
hdfs內容記錄:
0,this is a test,42
1,some more data,100
...
執行:sqoop-export --table foo --update-key id --export-dir /path/to/data --connect …,執行的sql命令將像下面:
UPDATE foo SET msg='this is a test', bar=42 WHERE id=0;
UPDATE foo SET msg='some more data', bar=100 WHERE id=1;
...
如果update語句沒有修改的行,不被認為是錯誤,匯出將無聲的進行。實際上,這意味著基於更新的匯出不會向資料庫插入新行。
同樣的,如果`--update-key`指定的列不是唯一的列,多行將被一行更新,也不會被察覺出來。
`--update-key` 可以被給用逗號分割的列名列表。在更新再有記錄之前,Sqoop將匹配所有的列表中的鍵
可以使用`allowinsert`模式指定為`--update-key`的引數,此時,如果表中的資料在資料庫中已經存在則更新,沒有存在則插入。
匯出案例
/hive/warehouse/test_month_swl_tmp_bak_20181204
–表名要大寫
nohup sqoop export --connect jdbc:oracle:thin:@localhost:1521:mailbi
–username dm --password dm --table “TMP_DM_USER_TOTAL_MONTH_NEW_LF”
–input-fields-terminated-by ‘\t’
–input-lines-terminated-by ‘\n’
–export-dir /hive/warehouse/test_month_swl_tmp_bak_20181204 1>nohup.out 2>error.out &
先將資料匯入staging表,在將staging表中資料放到目標表中
nohup sqoop export --connect jdbc:oracle:thin:@localhost:1521:mailbi
–username dm --password dm --table TMP_DM_USER_TOTAL_MONTH_NEW
–staging-table TMP_DM_USER_TOTAL_MONTH_NEW_LF
–clear-staging-table
–input-fields-terminated-by ‘\t’
–input-lines-terminated-by ‘\n’
–export-dir /hive/warehouse/test_month_swl_tmp_bak_20181204
1>/opt/aimcpro/lf/sqoop_dir/nohup.out 2>/opt/aimcpro/lf/sqoop_dir/error.out &