Sqoop User Guide v1.4.6文档7.2.3. Free-form Query Imports翻译

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. Free-form Query Imports翻译)