apache sgoop 导入数据到 oracle、导出数据到 oracle 实现

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

业务场景:是在oracle 数据库和  hive 数据库中 ,有多个相同结构的表,要求数据从2个库定时双向同步。

(导出时可以只导出部分字段,则此时 hive 库和 oracle 库中表结构可以并非完全一致)

1. 写一个文本文档,把要导入的表名和库名先编辑好,格式如 oracle_table_list_append.txt :

wate.BUSI_xxx
wate.xxx_xxx_INFO
wate.xxx_USER_xxx
... # wate 是 oracle 数据库名, BUSI_xxx 是表名。
# 可写多行,脚本执行时读取每个一行,循环导入每个表的数据。

编写sgoop  import 脚本并执行即可把数据从 oracle 数据库导入到 hive 数据库中。

current=`date -d "yesterday" +%Y-%m-%d`     #获取当前时间
#current=`date -d "yesterday 20190110" +%Y-%m-%d`     #获取指定日期的前一天begin=${current}" 00:00:00"sed -i '/^$/d' /opt/xxx/sqoop/conf/oracle_table_list_append.txt
cat /opt/xxx/sqoop/conf/oracle_table_list_append.txt|while read line
doOLD_IFS="$IFS"IFS="."arr=($line)db_name=${arr[0]}table_name=${arr[1]}echo "####begin to sqoop from oracle "${db_name}.${table_name} "......"sqoop import \--connect jdbc:oracle:thin:@192.168.xx.xx:1521/${db_name} \--username 数据库名 \--password 数据库密码 \--table ${table_name} \--where "creationtime >=to_date('${begin}','yyyy-mm-dd hh24:mi:ss') or xxxtime>=to_date('${begin}','yyyy-mm-dd hh24:mi:ss') or dxxtime>=to_date('${begin}','yyyy-mm-dd hh24:mi:ss') " \--hive-drop-import-delims \--null-string '\\N' \--null-non-string '\\N' \--fields-terminated-by '\007' \--lines-terminated-by '\n' \--hive-import \--hive-table hive数据库名.${table_name} \-m 10rc=$?if [ $rc -ne 0 ]thenecho "#### sqoop from oracle "${db_name}.${table_name} " failed......"# echo "#### sqoop from oracle "${db_name}.${table_name} " failed......"|mail -s "failed crontab_${current}" xxx@163.comelseecho "####sqoop from oracle "${db_name}.${table_name} " successed......"fidone
current=`date "+%Y-%m-%d %H:%M:%S"`     #获取当前时间
end_timeStamp=`date -d "$current" +%s`
du_time=$[end_timeStamp-begin_timeStamp]
echo "sqoop total time used:" $du_time "s" 
--where 此参数是条件过滤,全表导入,可不加此参数。

2.  编写sgoop  export 脚本并执行,则可把数据从 hive 库 导出到 oracle 数据库。 

current_datetime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start Timing Task:"$current_datetime
current=`date "+%Y-%m-%d %H:%M:%S"`     #获取当前时间
begin_timeStamp=`date -d "$current" +%s`table_name="cxx_xxx_day"
day=`date -d -1days "+%Y%m%d"` #昨天(此表以天分区,每次只导一天的数据)echo "####开始导出"${day}"的数据 into oracle oracle数据库名."${table_name} "......"sqoop export \--connect "jdbc:oracle:thin:@192.168.xxx.xxx:1521/oracle数据库连接名" \--username oracle数据库名 \--password oracle数据库密码 \--table ${table_name} \--export-dir "/user/hive/xxx/hivexxx.db/xxx_xxx_day/day=${day}" \--columns xxx_no,datatime,xxx_value,xxx_status,xxx_voage,staxx_str,stxxxs_hex,fy_id \--input-fields-terminated-by '\007' \--input-lines-terminated-by '\n' \--input-null-string '\\N' \--input-null-non-string '\\N' \--m 4rc=$?if [ $rc -ne 0 ]thenecho "Timing Task Error:"echo "####sqoop from hive into oracle "${table_name} " failed......"elseecho "####sqoop from hive into oracle "${table_name} " successed......"fi
current=`date "+%Y-%m-%d %H:%M:%S"`     #获取当前时间
end_timeStamp=`date -d "$current" +%s`
du_time=$[end_timeStamp-begin_timeStamp]
echo "sqoop total time used:" $du_time "s"
--export-dir 指定HDFS上的文件路径
--columns 指定要导出的列,可以只导出部分列

 

3. 官网说明文档:http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html

要查更多参数和用法可以直接查询官方文档。

import说明文档地址:http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_literal_sqoop_import_literal

export说明文档地址:http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_literal_sqoop_export_literal

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最佳的开源云项目有哪些?

Linux.com和The New Stack联合起来做了一个调查:你认为的最受欢迎的开源云项目是哪些?调查涵盖了hypervisors、IaaS、PaaS、管理和服务开通和其它类别的开源项目。所有项目较为成熟的、有规模的开源云项目。下一代的企业正在使用开放云技术打造完全不同的…

解决:-source 1.6 中不支持 diamond 运算符 [ERROR] (请使用 -source 7 或更高版本以启用 diamond 运算符)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 工程打包 mvn clean install 执行报错&#xff1a; 2. 解决方法&#xff0c;在pom中加上如下配置&#xff1a; <plugin><gr…

是什么摧毁了程序员的工作效率

本文是html5tricks原创翻译&#xff0c;转载请看清文末的转载要求&#xff0c;谢谢合作&#xff01; 下图是摘自网上有关程序员工作效率的论述。 正如Homer Simpson所说&#xff0c;如果这是真的&#xff0c;那就有意思了。 我之所以不能一针见血地发现如何才能高效工作的秘密…

解决:single failed: For artifact {null:null:null:jar}: The groupId cannot be empty. 把工程依赖的jar包打到入jar中

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 执行 mvn clean install 报错&#xff1a; Execution make-assembly of goal org.apache.maven.plugins:maven-assembly-plugin:2.4…

云计算技术背后的天才程序员:Open VSwitch鼻祖Martin Casado

摘要&#xff1a;Martin Casado被称为软件定义网络之父&#xff0c;OpenFlow的发明人、Nicira的创始人、硅谷最炙手可热的“40 under 40”之一&#xff0c;另外&#xff0c;他提交的虚拟交换机Open VSwitch的第一个Commit揭开波澜壮阔的软件定义网络时代。 【编者按】在一次采…

Maven Helper 安装使用(jar 包管理工具)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一般用这款插件来查看maven的依赖树。在不使用此插件的情况下&#xff0c;要想查看maven的依赖树就要使用Maven命令maven dependency:tr…

云计算技术背后的那些天才程序员:KVM之父Avi Kivity

摘要&#xff1a;KVM以其精简的架构&#xff0c;清晰的定位获得Linux社区多数开发人员的支持并快速被合并入主干&#xff0c;从而成为x86全虚拟化技术的一颗新星&#xff0c;其提出者Avi Kivity对于计算机体系架构和Linux内核有深入理解&#xff0c;并且精通汇编和C。 提到以色…

与Linus Torvalds“并列”,虚拟化天才程序员法布里斯贝拉

摘要&#xff1a;谈起阿兰图灵、高德纳、艾兹赫尔戴克斯特拉&#xff0c;我们并不陌生&#xff0c;这些振聋发聩名字背后是颠覆了人类生活的现代计算机工业。然而有些人的荣誉却远低于他的贡献&#xff0c;比如Fabrice&#xff0c;过去20年最闪亮和最有影响力的程序员之一。 【…

数据vs.算法,究竟谁更重要

摘要&#xff1a;数据和算法究竟哪个更重要并没有一个明确的界定&#xff0c;根据不同的情境和应用&#xff0c;它们发挥的作用不同。虽然实际情况确实如此&#xff0c;但是在数据为王的时代&#xff0c;算法的关心似乎已只停留在某些领域或者某些公司里面。 【编者按】随着服…

云数据中心选址PK:微软第一,IBM第二,谷歌最少

摘要&#xff1a;多区域数据中心往往可以侧面说明服务的可用性&#xff0c;在这个方面&#xff0c;Azure以12个区域领先&#xff0c;接着是Softlayer 9个&#xff0c;Amazon 8个&#xff0c;Rackspace 6个。Google比较落后&#xff0c;只有3个。 【编者按】当下&#xff0c;各…

用户暴增下的收入降低,AWS面临尴尬

摘要&#xff1a;虽然摩尔定律和规模经济会带来成本效益&#xff0c;但是在大量的竞争下&#xff0c;AWS的收益已明显降低&#xff0c;而10%的股价下降更带来了投资者的不满。 【编者按】虽然亚马逊的云业务远远超过了IBM、HP和Google等巨头科技软件公司&#xff0c;但是其增长…

为什么软件测试需要变革?

摘要&#xff1a;世易时移&#xff0c;现今的科技发展一日千里&#xff0c;软件测试这门科学也到了该进行革命的时候了。作者Bhumika Mehta认为软件测试需要的就是想法与创意。没有想法的测试人员可能在测试这条路上不会走得太远。 世易时移&#xff0c;现今的科技发展一日千里…

Linux统治超级计算领域的九个理由

Linux能统治超级计算领域的几个原因不外乎&#xff1a;历史悠久、成本低廉、可靠、安全、开源、资源丰富、易于管理、创新不断等等。1. Linux在超级计算的历史 NASA在1994年使用Linux建立了第一个Beowulf集群&#xff0c;作为昂贵的HPC超级计算机的一种替代品。“Beowulf集群是…

左手代码,右手是你

认识你是在 5 年前&#xff1a;成都&#xff0c;地铁2号线&#xff0c;白果林站&#xff0c;2014 年 2 月下旬 高高的&#xff0c;廋廋的&#xff0c;戴着一副莹润的眼镜&#xff0c;穿着一件并不太合身的、略宽松的羽绒服&#xff0c;安静的站在我们约定见面的地铁口 是的&a…

开源是如何让Android成为移动市场大佬的?

在如今的手机操作系统市场中&#xff0c;Android占有约80%的市场份额&#xff0c;是当之无愧的大佬。这其中离不开开源的贡献&#xff1a;作为开源系统本身&#xff0c;Android就激起了世界各地开发者、开源爱好者和大众用户的兴趣。大约是十年前&#xff0c;我有了自己的第一部…

十种程序语言帮你读懂大数据的“秘密”

摘要&#xff1a;经过数年发展&#xff0c;当下大数据领域已充斥着各种各样的分析工具&#xff0c;那么如何才能选择自己适合的。本文从R、Scala、Java、Go、Python等10种语言着手&#xff0c;带大家一览大数据领域的常用工具。 【编者按】面对成千上万条数据记录&#xff0c;…

标准开源产品是打破供应商垄断的关键

Mrten Mickos是美国桉树系统公司的CEO&#xff0c;提出当公司拘泥于自己的设计和定制化时&#xff0c;与他们被供应商锁定所受到的损害程度是相当的。Mickos解释了为什么他认为采用标准开源产品是避免这两种被锁定类型的最好方式。当谈到软件和云服务时&#xff0c;业务锁定是有…

专访阿里云总裁王文彬:做出“用得爽”的工程产品

摘要&#xff1a;已拥有近百万不同行业领域用户的阿里云&#xff0c;在产品开发、服务输出与生态系统建设等方面还将继续加速&#xff0c;多点开花。 回顾在2014年已经过去的半年中&#xff0c;阿里云在产品开发、服务输出与生态系统建设层面的诸多动作。不难看出&#xff0c;…

写代码前的准备,你做好了吗?

我们程序员很容易给别人一种深刻的误解&#xff1a;写代码的。包括我们自己有时候也会陷入这样的圈套之中。很多程序员在接到任务之后&#xff0c;就会马上想着如何用代码来实现&#xff0c;这是一种很不好的做法。其实&#xff0c;在我们写代码之前&#xff0c;还有很多工作要…

C++11(及现代C++风格)和快速迭代式开发

过去的一年我在微软亚洲研究院做输入法&#xff0c;我们的产品叫“英库拼音输入法” &#xff08;下载Beta版&#xff09;&#xff0c;如果你用过“英库词典”&#xff08;现已更名为必应词典&#xff09;&#xff0c;应该知道“英库”这个名字&#xff08;实际上我们的核心开发…