首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqoop -数据分割

问Sqoop -数据分割
EN

Stack Overflow用户
提问于 2016-05-05 04:27:47
回答 2查看 7.7K关注 0票数 2

Sqoop能够使用--query子句从多个表导入数据,但不清楚它是否能够导入下面的查询。

按部门从emp组中选择deptid、avg(薪资)

另一个问题是

sqoop导入--连接jdbc:mysql://myserver:1202/ -username=u1--密码=p1--查询‘empid< 1123和$CONDITIONS’从emp中选择*-按empid拆分-目标-dir/uname/emp/$CONDITIONS

$CONDITIONS和拆分是用来执行并行处理的,或者可以说是高效地导入数据。前者根据条件拆分行,然后在主键上使用min和max逻辑。这两种($CONDITIONS, split-by)的区别是什么?如果在同一个sqoop语句中同时使用这两种语句,那么哪个子句将获得优先级?

谢谢..。

EN

回答 2

Stack Overflow用户

发布于 2016-05-05 10:38:00

你的理解上有一些差距。

首先,并行度由-m <n>或--num-mappers <n>控制。默认情况下,--num-mappers为4。

第二,--split-by <column-name>,将根据列名来拆分任务.

第三,$CONDITIONS,sqoop内部使用它来完成这个拆分任务。

示例,您启动了一个查询:

sqoop import --connect jdbc:mysql://myserver:1202/ --username u1 --password p1 --query 'select * from emp where $CONDITIONS' --split-by empId --target-dir /temp/emp -m 4

比如说,我的empId是在1-100之间均匀分布的。

现在,sqoop将接受--split-by列,并使用查询找到其max和min值:

SELECT MIN(empId), MAX(empId) FROM (Select * From emp WHERE (1 = 1) ) t1

将$CONDITIONS替换为(1 = 1)。

在我们的例子中,min,最大值是1和100。

由于映射器的数量为4,sqoop将我的查询分成4部分。

使用下限“empId >= 1”和上限“empId<25”创建输入拆分 使用下限“empId >= 25”和上限“empId<50”创建输入拆分 使用下限“empId >= 50”和上限“empId<75”创建输入拆分 使用下限“empId >= 75”和上限“empId <= 100”创建输入拆分

现在,$CONDITIONS将再次出现在画面中。它被上面的范围查询所取代。

第一个映射器将引发如下查询:

Select * From emp WHERE empId >= 25' AND 'empId < 50

其他3位地图绘制者也是如此。

所有映射器的结果都被聚合并写入到最终的HDFS目录中。

关于您的查询的 :

select deptid, avg(salary) from emp group by deptid

您将指定

--query 'select deptid, avg(salary) from emp group by deptid where $CONDITIONS'

它将首先被转换为

select deptid, avg(salary) from emp group by deptid where (1 = 0)

获取列元数据。

我相信这个查询不会在RDBMS中运行。在Mysql中直接尝试上面的查询(有Where (1 = 0))。

因此,您将无法使用此查询来使用Sqoop获取数据。

Sqoop用于更简单的SQL查询.

票数 10
EN

Stack Overflow用户

发布于 2016-11-25 12:05:22

您的查询“Select* from emp where empid< 1123和$CONDITIONS”可以很好地将数据从关系数据库导入到HDFS。

即使$CONDITIONS首先在where子句中计算为1=0,但如果您在控制台上看到Sqoop导入日志,实际上将看到另一个SQL边界查询,它将用1=1替换$CONDITIONS,后者将传递查询,因此可以导入数据。

请注意,Sqoop甚至可以导入中等复杂的SQL查询,如联接。我不确定它是否能够支持高度复杂的SQL查询,尽管我还没有亲自测试它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37042357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档