使用Oracle数据库

时间:2018-01-16 07:36:32

标签: sqoop

我正在尝试根据Oracle数据库中的查询导入数据。该查询包括连接和多个表。这需要很长时间。有什么可以优化的吗?

  

sqoop import \
  --connect jdbc:oracle:thin:// @ localhost / DB \
  --username hybb \
  --password **** \
  --query" SELECT l4.id,TRUNC(timestamp)dt,TO_CHAR(timestamp,' HH24')hour,flag,type,l2.on_off_det,CASE WHEN flag = 1 THEN   flag = 0然后以CRP结束,SUM(当标志为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 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   20161111和20161230之间和l2.on_off_det IN   (' Off',' OffInt',' On')并输入IN(' s',' v', ' m')和\ $ CONDITIONS GROUP   BY l4.id,timestamp,flag,type,l2.on_off_det,CASE WHEN flag = 1 THEN   当标志= 0然后结束" \
  -m 1 \
  --target-dir / tmp / output

1 个答案:

答案 0 :(得分:0)

您绝对可以提高性能,您必须测试一些选项,以找出哪种解决方案更适合您的情况。我有两个建议

第一个>>> 通过按键添加分割来增加地图制作工具。

什么是分裂条款?来自Stack

用于指定用于生成导入拆分的表的列。这意味着它指定在将数据导入群集时将使用哪个列来创建拆分。它可以通过实现更大的并行性来增强导入性能。 Sqoop根据表中特定列的值创建拆分 - 用户通过import命令分割。如果它不可用,则使用输入表的主键创建拆分。

应该使用哪种类型的字段进行拆分? 有时主键在最小值和最大值之间没有均匀的值分布(如果--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

请参阅this Horton工作社区页面,以便有效使用地图制作工具。

第二个&gt;&gt;&gt;

sqoop中有一个名为direct option(--direct)的选项,最近oracle也支持这个选项,但是我不确定你是否运行了复杂查询,请参考link了解更多信息。