Sqoop匯入匯出總結

2021-10-23 11:49:56 字數 4322 閱讀 2030

bin/sqoop import \ (輸入命令)

--connect jdbc:mysql://hadoop102:3306/testdb \ (指定連線jdbc埠和資料庫名稱)

--username root \ (資料庫使用者名稱)

--password 000000 \ (密碼 若不適用明文指定資料庫密碼 則可以用-p)

--table user \ (指定資料庫中的一張表)

--target-dir /input/import \ (指定資料匯入到hdfs上的目錄)

--delete-target-dir \ //如果目標目錄已存在,則先刪除

--fields-terminated-by ","

(目標檔案的分隔符, 預設情況下,匯入hdfs的每行資料分隔符是逗號)

bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/sqoop \

--username root \

--password 000000 \

--table user \

--columns "id,account" \

--target-dir /sqoop/query1 \

-m 1 \

--delete-target-dir \

--fields-terminated-by "\t"

$sqoop

import \

--connect jdbc:mysql://hadoop102:3306/gmall \

--username root \

--password 000000 \

--target-dir /origin_data/gmall/db/$1/$do_date \

--delete-target-dir \

--query "$2 and \$conditions" \ (查詢語句)

--fields-terminated-by '\t' \

--compress \

--compression-codec lzop \

--null-string '\\n' \

--null-non-string '\\n'

–check-column (col)

用來指定一些列,這些列在增量匯入時用來檢查這些資料是否作為增量資料進行匯入,和關係型資料庫中的自增字段及時間戳類似。

注意:這些被指定的列的型別不能使任意字元型別,如char、varchar等型別都是不可以的,同時-- check-column可以去指定多個列。

–incremental (mode)

lastmodified:最後的修改時間,追加last-value指定的日期之後的記錄

–last-value (value) :指定自從上次匯入後列的最大值(大於該指定的值),也可以自己設定某一值

注意:

2.--check-column 不是使用char/nchar/varchar/varnchar/ lon**archar/longnvarchar這樣的資料型別,後面跟 唯一 不重複的列 類似主鍵

3.--incremental 支援兩種模式

lastmodified 告訴sqoop是最後一次修改檔案的時間戳來區分從**開始增量匯入

bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/test \

--username root \

--password 000000 \

--table sqoop_test \

--target-dir /user/bigdata/input \

--fields-terminated-by "," \

--check-column id \

--last-value 1207 \

測試

在mysql資料庫中建立表,插入資料:

create

table sqoop_test(id int(11

),name varchar(25

),deg varchar(25

),salary float

, dept varchar(25

));insert

into

`test`

.`sqoop_test`

(`id`

,`name`

,`deg`

,`salary`

,`dept`

)values

('1208'

,'allen'

,'admin'

,'30000'

,'tp');

insert

into

`test`

.`sqoop_test`

(`id`

,`name`

,`deg`

,`salary`

,`dept`

)values

('1209'

,'woon'

,'admin'

,'40000'

,'tp'

);

bin/sqoop import \

--connect jdbc:mysql://node-1:3306/userdb \

--username root \

--password hadoop \

--table customertest \

--target-dir /lastmodifiedresult \

--check-column last_mod \

--incremental lastmodified \

--last-value "2019-05-28 18:42:06" \

--m 1 \

lastmodified模式去處理增量時,會將大於等於last-value值的資料當做增量插入

lastmodified 模式:merge-by

*merge-key****(合併)模式新增

bin/sqoop import \

--connect jdbc:mysql://node-1:3306/userdb \

--username root \

--password hadoop \

--table customertest \

--target-dir /lastmodifiedresult \

--check-column last_mod \

--incremental lastmodified \

--last-value "2019-05-28 18:42:06" \

--m 1 \

--merge-key id

– update-key,更新標識,即根據某個字段進行更新,例如id,可以指定多個更新標識的字段,多個字段之間用逗號分隔。

– updatemod,指定updateonly(預設模式),僅僅更新已存在的資料記錄,不會插入新紀錄。

**:

bin/sqoop export \

--connect jdbc:mysql://hadoop:3306/userdb \

--username root \

--password 000000 \

--table updateonly \

--export-dir /updateonly_2/ \

--update-key id \

--update-mode updateonly

– update-key,更新標識,即根據某個字段進行更新,例如id,可以指定多個更新標識的字段,多個字段之間用逗號分隔。

– updatemod,指定allowinsert,更新已存在的資料記錄,同時插入新紀錄。實質上是乙個insert & update的操作。

bin/sqoop export \

--connect jdbc:mysql://hadoop102:3306/userdb \

--username root --password 000000 \

--table allowinsert \

--export-dir /allowinsert_2/ \

--update-key id \

--update-mode allowinsert

sqoop匯入匯出

sqoop官方手冊位址 最近在看sqoop有些感想,就寫下來。sqoop是大資料裡面匯入匯出的乙個工具。關於import匯出 可以從mysql匯出到hdfs,hbase,hive,案例如下,這是乙個匯出到hdfs的案例 import connect jdbc mysql username root ...

sqoop匯入 匯出

全部匯入 sqoop import connect jdbc mysql hadoop01 3306 test1 username root password 1234 table students target dir user test1 delete target dir fields ter...

Sqoop資料匯入匯出命令總結

1 列出mysql資料庫中的所有資料庫命令 sqoop list databases connect jdbc mysql username root password 123456 2 連線mysql並列出資料庫中的表命令 sqoop list tables connect jdbc mysql ...