import-query子命令-where子句中的参数

kdfy810k  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(442)

我想问一下是否有人可以向我详细解释一个sqoop“query”子命令的功能。
我要用这个视频的一个例子:
https://youtu.be/7oz_cctys5q?list=plf0swtfhti8rjvgpop-lujocpk-rlz-ye&t=1515
query=“select*from orders join orders\u items on orders.order\u id=order\u items.order\u item\u order\u id where$conditions”
如我们所见,在where条件中添加了一个参数“$conditions”。
可能我错了,但看了视频后,我明白了如果参数“$conditions”存在,条件将被替换为“1=1”,如果不存在,条件将被替换为“1=0”。
我的问题是:
1-为什么建议在“query”子命令的where子句中使用参数
2-如果在参数中确实有一个where子句,而我们想在“query”子命令中使用它,而不是在“where”子命令中使用它,会发生什么?
感谢你的帮助,
大卫。

ar7v8xwq

ar7v8xwq1#

我还没有完全理解你的疑问,不过让我试着回答。如果你在找别的东西,请告诉我。
1-为什么建议在“query”子命令的where子句中使用参数
sqoop并行地从rdbms导入数据。您可以通过使用 -m 或者 --num-mappers 争论。默认情况下,sqoop将使用4个map任务。
例如,如果有一个主键列为 order_id 最小值为0,最大值为1000,sqoop被指示使用4个任务,sqoop将运行4个进程,每个进程执行表单的sql语句 SELECT * FROM orders WHERE $CONDITIONS 现在$conditions占位符将被替换如下
对于Map任务1: order_id >= 0 and order_id < 250 最后的sql看起来像
从订单号>=0和订单号<250的订单中选择*
对于map任务2: order_id >= 250 and order_id < 500 最后的sql看起来像
从订单号>=250和订单号<500的订单中选择*
对于map任务3: order_id >= 500 and order_id < 750 最后的sql看起来像
从订单号>=500和订单号<750的订单中选择*
对于map任务4: order_id >= 750 and order_id < 1001 最后的sql看起来像
从订单号>=750和订单号<1001的订单中选择*
如您所见,$conditions是一个占位符,sqoop将搜索它并用生成的值替换它。请注意,如果Map任务数大于1,则必须指定$条件。
2-如果在参数中确实有一个where子句,而我们想在“query”子命令中使用它,而不是在“where”子命令中使用它,会发生什么?
您只需在$conditions前面加上前缀 AND .
例如,如果您只想加载订单金额大于100的订单。
query=“select*from orders join order\u items on orders.order\u id=order\u items.order\u item\u order\u id其中$conditions和order\u amount>100”
希望这能澄清!

相关问题