日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sqoop动态分区导入mysql,使用sqoop import从mysql往hive含分区表中导入数据的一些注意事项...

發(fā)布時間:2023/12/9 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqoop动态分区导入mysql,使用sqoop import从mysql往hive含分区表中导入数据的一些注意事项... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先看下面這條語句,它實現(xiàn)的功能是將特定日期的數(shù)據(jù)從mysql表中直接導(dǎo)入hive

$ sqoop import \

--connect jdbc:mysql://192.168.xx.xx:3306/db_name?useSSL=false \

--username xxx --password xxxxxx \

--query "select d.id, d.callsign, d.sobt from t_flight_baseinfo d where d.id is not null and d.sobt >= '2020-12-27' and \$CONDITIONS" \

--target-dir /user/hive/warehouse/datapros.db/t_flight_baseinfo/dt=2020-12-27 \

--delete-target-dir --fields-terminated-by '\t' --split-by d.id \

--hive-import --hive-overwrite --m 2 --direct \

--hive-database datapros --hive-table t_flight_baseinfo \

--hive-partition-key dt --hive-partition-value 2020-12-27

以下對命令中的參數(shù)作簡單說明:

--connect /--username / --password

很明顯,這是mysql數(shù)據(jù)庫的連接字符串

--query

這是選取數(shù)據(jù)的查詢語句。這里需要注意的是:

每條查詢語句必須要添加where條件;

末尾還要加上'$CONDITIONS'這個占位符;

當(dāng)使用雙引號包裹住這個查詢語句時,'$CONDITIONS'前要加上轉(zhuǎn)義符變?yōu)?#39;\$CONDITIONS',而如果使用單引號來包裹,就不用加轉(zhuǎn)義符!

--target-dir

mysql數(shù)據(jù)導(dǎo)入HDFS后的目標(biāo)路徑(也即hive表的“數(shù)據(jù)文件”地址)

--delete-target-dir

導(dǎo)入前是否先刪除target-dir中定義的目錄(如果存在的話)

說明:這個參數(shù)比較重要!一般情況下,同一條導(dǎo)入語句,第一次執(zhí)行時,要不要這個參數(shù)沒有關(guān)系,但如果是多次執(zhí)行同一條導(dǎo)入語句,而又沒有提前手工刪除目標(biāo)目錄時,就出出現(xiàn)“Output directory hdfs://hadoop:9820/somepath/${target_dir} already exists”,因此,這個參數(shù)一定要加上

--direct

使用直接導(dǎo)入模式,可以提高導(dǎo)入速度

--m 2

指定并行執(zhí)行導(dǎo)入數(shù)據(jù)任務(wù)的map進程個數(shù)

--hive-database / --hive-table t_flight_baseinfo

指定導(dǎo)入到hive中的目標(biāo)數(shù)據(jù)庫與數(shù)據(jù)表名稱

--hive-partition-key / --hive-partition-value

指定hive數(shù)據(jù)表的分區(qū)信息

--hive-overwrite

指定hive中的目標(biāo)表可以被多次覆蓋寫入

--hive-import / --create-hive-table

1、create-hive-table:在hive中創(chuàng)建目標(biāo)表(不管它是不是已經(jīng)存在),如果目標(biāo)表已經(jīng)存在,就會給出“AlreadyExistsException(message:Table XXX already exists”出錯信息;

2、hive-import : hive-import在執(zhí)行時,會自動生成一個建表的sql語句,當(dāng)hive中不存在表時,它即自動創(chuàng)建目標(biāo)表與存儲目錄,然后再導(dǎo)入數(shù)據(jù);

mysql往hive帶分區(qū)表中導(dǎo)入實踐

1、在實踐中發(fā)現(xiàn),當(dāng)需要創(chuàng)建帶分區(qū)的表時,如果使用--create-hive-table參數(shù),則每次都會提示表已存在錯誤(這個表確實是存在);不過,這個錯誤提示不影響命令的正確執(zhí)行;

2、但是,如果不帶上這個參數(shù),如果之前這個分區(qū)已存在 ,則會出現(xiàn)在hive表中能查到這個分區(qū),但是它實際的存儲目錄已經(jīng)被刪除(delete-target-dir參數(shù)的效果), hive-import會認(rèn)為此分區(qū)已存在,就停止從mysql中往hdfs中導(dǎo)入數(shù)據(jù),最后提示導(dǎo)入的數(shù)據(jù)numFiles=0,相當(dāng)于分區(qū)表被清空;

3、如果不想每次都看到表已存在的錯誤提示,可以在執(zhí)行導(dǎo)入命令之前,先執(zhí)行一下 hive -e "alter table db_name.tb_name drop partition(partition_key='partition_value');"),先刪除這個分區(qū),這樣hive-import就會創(chuàng)建hive表分區(qū)與重建存儲目錄。當(dāng)然,這時候就不用加--create-hive-table參數(shù)了。

總結(jié)

以上是生活随笔為你收集整理的sqoop动态分区导入mysql,使用sqoop import从mysql往hive含分区表中导入数据的一些注意事项...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。