Sqoop(二):Hive导出数据到Oracle

把Hive中的数据导入Oracle数据库。

1. 解释一下各行代码:

复制代码
sqoop export
# 指定要从Hive中导出的表
--table TABLE_NAME    
# host_ip:导入oracle库所在的ip:导入的数据库
--connect jdbc:oracle:thin:@HOST_IP:DATABASE_NAME 

# oracle用户账号
--username USERNAME
# oracle用户密码
--password PASSWORD 

# hive表数据文件在hdfs上的路径
--export-dir /user/hive/test/TABLE_NAME
# 指定表的列名,必须指定 
--columns ID,data_date,data_type,c1,c2,c3 

# 列分隔符(根据hive的表结构定义指定分隔符)
--input-fields-terminated-by '\001'
# 行分隔符
--input-lines-terminated-by '\n' 

# 如果hive表中存在null字段,则需要添加参数,否则无法导入
--input-null-string '\\N' 
--input-null-non-string '\\N'

2. 案例:

复制代码
sqoop export \
--connect jdbc:oracle:thin:@172.12.12.102:orcl \
--username test \
--password kong \
--table table_abc \
--export-dir /user/hive/warehouse/bonc_gjj.db/table_abc \
# 注意,这一行columns不能有多余的空格,否则会报错。
--columns 

zzjgdm,jgmc,jglx,jjlx,frdbhfzr,xzqhdm,yzbm,tzgb,hbzl,jgdz,dh,yxqzfrq,zczj,njq0,fzrq,zzzt,pzwhhzch,bfdw,lastdate,id,dir_id,dir_ver,dir_ver_serail_num,addtime,updatetime,edituser_id,edituser,editdept_id,editdept,inserttype,is_valid,audit_status,pk_md5,sys_encrypt \
    --input-fields-terminated-by '\001' \
    --input-lines-terminated-by '\n' \
    --input-null-string "\\\\N" \
    --input-null-non-string "\\\\N"

3. 表多的话,把所有表名存放在文件下,循环跑批每个表

shell 复制代码
#!/bin/bash 
a=0;
b=1;
# ``这两个反斜点,就是说里面这是一个变量,我的have_data_table_name是一个文件,里面存的是一堆表名。
# cat file_name,自己试试什么效果。for 开始循环表名。
for table_name in `cat ./have_data_table_name`
    do
    a=`expr $a + $b`
    echo "表名:$table_name,计数:$a";
    echo  "开始导入数据!"
    # 这一行就厉害了,简单来说就是取出一张表的所有列名,每个列名后加个逗号,然后去掉最后一个逗号,存在col这个变量中。
    col=`hive -e "desc database_name.${table_name}"|sed '1d'|awk '{printf $1","}'|sed 's/,$/\n/g'`

sqoop export \
--connect jdbc:oracle:thin:@172.12.12.102:1521:orcl \
--username test \
--password kong \
--table ${table_name} \
--export-dir /user/hive/warehouse/database_name.db/${table_name} \
--columns ${col} \
--input-fields-terminated-by '\001' \
--input-lines-terminated-by '\n' \
--input-null-string "\\\\N" \
--input-null-non-string "\\\\N"

    echo "第${a}张表导入完毕!";
done

参考:
https://codeleading.com/article/51121246034/#google_vignette

相关推荐
woxihuan1234566 小时前
SQL删除数据时存在依赖关系_设置外键级联删除ON DELETE
jvm·数据库·python
东风破1376 小时前
DM8达梦共享存储集群DSC搭建步骤
数据库·学习·dm达梦数据库
雪碧聊技术7 小时前
当数据库字段数大于Java实体类属性数时,MyBatis还能映射成功吗?一文详解
数据库·自动映射·mybatis映射机制·java实体类·宽容映射机制
Jetev7 小时前
如何确定SQL字段是否为空_使用IS NULL与IS NOT NULL
jvm·数据库·python
m0_702036537 小时前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
代钦塔拉7 小时前
Qt4 vs Qt5 带参数信号槽的连接方式详解
开发语言·数据库·qt
2401_846339567 小时前
MySQL在云环境如何选择存储类型_SSD与高性能云盘配置建议
jvm·数据库·python
zhaoyong2228 小时前
SQL如何统计每个用户的首次行为时间_MIN聚合与分组
jvm·数据库·python
2501_901006479 小时前
C#怎么实现配置热更新 C#如何在运行时动态刷新配置文件不需要重启程序【技巧】
jvm·数据库·python
m0_470857649 小时前
HTML怎么创建响应式图片备选方案_HTML srcset与sizes结构【详解】
jvm·数据库·python