美文网首页Sqoop学习
Sqoop User Guide v1.4.6文档7.2.3.

Sqoop User Guide v1.4.6文档7.2.3.

作者: gregocean | 来源:发表于2018-03-07 11:32 被阅读0次

    Free-Form Query Imports

    7.2.3 利用Query进行自定义Imports

    Sqoop也可以导入任意一个SQL查询结果。你可以通过--query参数指定一个SQL语句,代替使用--table,--columns和--where参数。

    当导入一个任意的查询,你必须指定目标目录(使用--target-dir)。

    如果你想并行导入一个查询结果,每个map任务需要执行由Sqoop基于约束条件来划分的查询结果的拷贝。你的查询必须包含$CONDITIONS标记,每个Sqoop进程会用唯一的条件表达式代替它。你还必须选择一个用于分割的列(用--split-by)。

    举例

    $ sqoop import \

      --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \

      --split-by a.id --target-dir /user/foo/joinresults

    可替代地,查询可以执行一次,且顺序导入(通过使用-m 1来指定单独的map任务)。

    $ sqoop import \

      --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \

      -m 1 --target-dir /user/foo/joinresults

    注意

    如果你的查询语句用双引号包含,你需要使用\$CONDITIONS而非$CONDITIONS来禁止shell将其作为shell的变量。比如,一个带双引号的请求应该是这样: "SELECT * FROM x WHERE a='foo' AND \$CONDITIONS"

    注意

    当前版本的Sqoop的自定义请求功能限定在简单的查询,查询不能包含模糊的投影,也不能在WHERE语法里有OR条件。使用带有子查询或join操作的复杂查询会导致模糊投影并得到不能预知的结果。

    相关文章

      网友评论

        本文标题:Sqoop User Guide v1.4.6文档7.2.3.

        本文链接:https://www.haomeiwen.com/subject/waqjfftx.html