sqoop参数就不在这里说了,具体可以看这篇文章,很详细:
Sqoop基本原理及常用方法_所行化坦途的博客-CSDN博客_sqoop
导入 mysql 数据到 hive 中并添加静态分区?
示例:抽取 mysql 中 work.test 表到 hive 中 ods.test 表,并根据字段 day 添加静态分区。
sqoop import \
--connect jdbc:mysql://127.0.0.1:3306/work \ ?#注意这里可能要加参数,比如关闭SSL或者设置时区等等
--username root \
--password 123456 \
--table test \
--delete-target-dir \
--target-dir /sqoop_tmp \
--hive-import \
--hive-table ods.test \ #这个写法相当于 --hive-database ods --hive-table test
--hive-partition-key day \
--hive-partition-value 2022-06 \
--m 1
导入 mysql 数据到 hive 中并添加动态分区
大概就是3个步骤:
-
使用 sqoop 将数据导入到临时表 -
利用 hive 读取临时表的数据,添加动态分区 -
删除临时表
示例:抽取 mysql 中 work.work_data 表到 hive 中 ods.work_data 表,并根据字段 day 添加动态分区。
???1.? 使用 sqoop 将数据导入到临时表
sqoop import \
--connect jdbc:mysql://127.0.0.1:3306/work \
--username root \
--password 123456 \
--table work_data \
--delete-target-dir \
--target-dir /sqoop_tmp \
--hive-import \
--hive-table ods.work_data_tmp \ ?#不存在的表 sqoop 会自动创建
--m 1
?2.?利用 hive 读取临时表的数据,添加动态分区
# 进入 hive
use ods;
set hive.exec.dynamic.partition=true; # 开启动态分区
set hive.exec.dynamic.partition.mode=nonstrict; # 开启动态分区非严格模式
?
insert into table ods.work_data partition(day)
select *,day from ods.work_data_tmp;
?3. 删除临时表
drop table ods.work_data_tmp;
注:如果动态分区实现有更好的方法,请各位大佬留言告诉我[/doge]
动态分区参考:SparkSQL抽取Mysql全量数据到Hive动态分区表中_月亮给我抄代码的博客-CSDN博客_spark sql 随机抽取
|