我正在使用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

问:美元条件的目的是什么?为什么在这个查询中使用?谁能给我解释一下。

最佳答案

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

关于mysql - --query下$ CONDITIONS的作用是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42330986/

10-12 19:53