从oracle数据库使用query选项导入sqoop

bcs8qyzn  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(348)

我正在尝试根据oracle数据库中的查询导入数据。查询包括多个表上的联接和查询。这需要很长时间。有什么可以优化的吗?
sqoop导入
--连接jdbc:oracle:瘦://@localhost/db
--用户名hybb
--密码****
--查询“select l4.id,trunc(timestamp)dt,to_char(timestamp,'hh24')hour,flag,type,l2.on\u off\u det,case when flag=1,fro when flag=0,to end as crp,sum(case when flag=0,dur when flag=1,then round(cnt,0)else 0 end)csum,count(l4.id)ccnt from admin.t1 l2,admin.t2 l3,admin.t3 l4,admin.t4 l5,其中l4.rtk=l5.rtk和l3.ct不在('test','test1','test2')和l4.on_off_key=l2.on_off_key和l4.id_key=l3.id_key和l4.startdate介于20161111和20161230之间,l2.on_off_det在('off','offint','on')和键入('s','v','m')和$按l4.id、时间戳、标志、类型、l2.on_off det分组的条件,当flag=1时为case,当flag=0时为fro,然后结束“
-米1
--目标目录/tmp/输出

suzh9iv8

suzh9iv81#

您肯定可以提高性能,您必须测试几个选项,以找出哪个解决方案更适合您的情况。我有两个建议
第一个>>>通过添加一个splitby键来增加Map器。
什么是按条款分割??从堆栈
它用于指定用于为导入生成拆分的表的列。这意味着它指定在将数据导入集群时将使用哪个列来创建拆分。它可以通过实现更大的并行性来提高导入性能。sqoop根据用户通过import命令通过--split by指定的表的特定列中的值创建拆分。如果不可用,则使用输入表的主键创建拆分。
应使用哪种类型的字段进行拆分??有时主键的最小值和最大值之间的值分布不均匀(如果--split by不可用,则用于创建拆分)。在这种情况下,您可以指定其他具有适当数据分布的列来创建有效导入的拆分。

sqoop import \
--connect jdbc:oracle:thin://@localhost/DB \
--username hybb \
--password****\
--split-by <column name>
--query "SELECT l4.id , TRUNC(timestamp) dt, TO_CHAR(timestamp,'HH24') hour, flag , type , l2.on_off_det , CASE WHEN flag = 1 THEN fro WHEN flag = 0 THEN to END AS CRP, SUM(CASE WHEN flag = 0 THEN dur WHEN flag = 1 THEN ROUND(CNT,0) ELSE 0 END) csum, COUNT(l4.id) ccnt FROM admin.t1 l2, admin.t2 l3 , admin.t3 l4, admin.t4 l5 WHERE l4.rtk=l5.rtk AND l3.ct NOT IN ('test','test1','test2') AND l4.on_off_key=l2.on_off_key AND l4.id_KEY=l3.id_KEY AND l4.startdate between 20161111 AND 20161230 AND l2.on_off_det IN ('Off','OffInt','On') and type IN ('s','v','m') AND \$CONDITIONS GROUP BY l4.id, timestamp,flag,type,l2.on_off_det, CASE WHEN flag = 1 THEN fro WHEN flag = 0 THEN to END " \
-m <increase number based on your cluster> \
--target-dir /tmp/output

请参阅本霍顿作品社区网页的有效使用Map。
第二个>>>
sqoop中有一个名为direct option(--direct)的选项,最近oracle也支持这个选项,但我不确定是否运行了复杂查询,请参阅此链接了解更多信息。

相关问题