在-query下$ CONDITIONS的目的是什么?

时间:2017-02-19 18:15:58

标签: mysql sqoop

我正在使用cloudera快速入门版CDH 5.7

我在终端窗口使用了以下查询:

sqoop import \
  --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \
  --username=retail_dba \
  --password=cloudera \
  --query="select * from orders join order_items on orders.order_id = order_items.order_item_order_id where \$CONDITIONS" \
  --target-dir /user/cloudera/order_join \
  --split-by order_id \
  --num-mappers 4

问:$ CONDITIONS的目的是什么?为什么在此查询中使用?任何人都可以向我解释。

1 个答案:

答案 0 :(得分:1)

sqoop在内部使用

$CONDITIONS修改查询以实现任务拆分和获取元数据。

要获取元数据,sqoop会将\$CONDITIONS替换为1 = 0

select * from table where 1 = 0

要获取所有数据(1个映射器),sqoop将\$CONDITIONS替换为1 = 1

select * from table where 1 = 1

在多个映射器的情况下,sqoop用范围查询替换\$CONDITIONS以从RDBMS获取数据的子集。

例如,id位于1到100之间,我们使用4个映射器。

Select * From table WHERE id >= 1' AND 'id < 25
Select * From table WHERE id >= 25' AND 'id < 50
Select * From table WHERE id >= 50' AND 'id < 75
Select * From table WHERE id >= 75' AND 'id <= 100