怎么實現跨服務器自動復制sql表數據?
MySQL::MySQLGUIToolsBundl:Archiv
如何用sqoop將hive分區表信息導入到mysql命令?
問題分析:
hive中分區表其底層就是HDFS中的多個目錄下的單個文件,hive導出數據本質是將HDFS中的文件導出
hive中的分區表,因為分區字段(靜態分區)不在文件中,所以在sqoop導出的時候,無法將分區字段進行直接導出
思路:在hive中創建一個臨時表,將分區表復制過去后分區字段轉換為普通字段,然后再用sqoop將tmp表導出即實現需求
步湊如下:
文章目錄
1.創建目標表(分區表)
1.1查看表結構
2.導入數據
3.查詢表dept_partition
4.創建臨時表tmp_dept_partition
5.查詢臨時表
6.查看表結構(這個時候分區表已經轉換為非分區表了)
中建表dept_partition
8.使用sqoop導入到MySQL
查詢驗證是否成功導出
1.創建目標表(分區表)
hivegtCREATETABLE`dept_partition`(
`deptno`int,
`dname`string,
`loc`string)
PARTITIonEDBY(`month`string)rowformatdelimitedfieldsterminatedbyt
1
2
3
4
5
1
2
3
4
5
1.1查看表結構
hivegtshowcreatetabledept_partition
1
1
------------------------------------------------------
|createtab_stmt|
------------------------------------------------------
|CREATETABLE`dept_partition`(|
|`deptno`int,|
|`dname`string,|
|`loc`string)|
|PARTITIonEDBY(|
|`month`string)
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
2.導入數據
hivegtloaddatainpath/user/hive/hive_db/data/dept.txtintotabledept_partition
1
1
10tACCOUNTINGt1700
20tRESEARCHt1800
30tSALESt1900
40tOPERATIONSt1700
1
2
3
4
1
2
3
4
3.查詢表dept_partition
hivegtselect*fromdept_partition
1
1
---------------------------------------------------------------------------------------------
|dept_|dept_partition.dname|dept_partition.loc|dept_|
---------------------------------------------------------------------------------------------
|10|ACCOUNTING|1700|2019-10-19|
|20|RESEARCH|1800|2019-10-19|
|30|SALES|1900|2019-10-19|
|40|OPERATIONS|1700|2019-10-19|
|10|ACCOUNTING|1700|2019-10-20|
|20|RESEARCH|1800|2019-10-20|
|30|SALES|1900|2019-10-20|
|40|OPERATIONS|1700|2019-10-20|
---------------------------------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
4.創建臨時表tmp_dept_partition
hivegtcreatetabletmp_dept_partitionasselect*fromdept_partition
1
1
5.查詢臨時表
hivegtselect*fromtmp_dept_partition
1
1
-------------------------------------------------------------------------------------------------------------
|tmp_dept_|tmp_dept_partition.dname|tmp_dept_partition.loc|tmp_dept_|
-------------------------------------------------------------------------------------------------------------
|10|ACCOUNTING|1700|2019-10-19|
|20|RESEARCH|1800|2019-10-19|
|30|SALES|1900|2019-10-19|
|40|OPERATIONS|1700|2019-10-19|
|10|ACCOUNTING|1700|2019-10-20|
|20|RESEARCH|1800|2019-10-20|
|30|SALES|1900|2019-10-20|
|40|OPERATIONS|1700|2019-10-20|
-------------------------------------------------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
6.查看表結構(這個時候分區表已經轉換為非分區表了)
hivegtshowcreatetabletmp_dept_partition
1
1
------------------------------------------------------
|createtab_stmt|
------------------------------------------------------
|CREATETABLE`tmp_dept_partition`(|
|`deptno`int,|
|`dname`string,|
|`loc`string,|
|`month`string)
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
中建表dept_partition
mysqlgtdroptableifexistsdept_partition
createtabledept_partition(
`deptno`int,
`dname`varchar(20),
`loc`varchar(20),
`month`varchar(50))
1
2
3
4
5
6
1
2
3
4
5
6
8.使用sqoop導入到MySQL
bin/sqoopexport
--connectjdbc:mysql://hadoop01:3306/partitionTb
--usernameroot
--password123456
--tabledept_partition
--num-mappers1
--export-dir/user/hive/warehouse/hive_db.db/tmp_dept_partition
--input-fields-terminated-by