赞
踩
sqoop参数就不在这里说了,具体可以看这篇文章,很详细:
Sqoop基本原理及常用方法_所行化坦途的博客-CSDN博客_sqoop
示例:抽取 mysql 中 work.test 表到 hive 中 ods.test 表,并根据字段 day 添加静态分区。
Hive 中该表可以不存在,但是库必须存在。
- 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
大概就是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;
注意,这个地方 select 尽量将字段写全,不要使用 *
3. 删除临时表
drop table ods.work_data_tmp;
注:如果动态分区实现有更好的方法,请各位大佬留言告诉我[/doge]
动态分区参考:SparkSQL抽取Mysql全量数据到Hive动态分区表中_月亮给我抄代码的博客-CSDN博客_spark sql 随机抽取
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。