我想问一下是否有人可以详细解释一下Sqoop“query”子命令功能。
我将使用此视频的示例:
HTTPS://youtu.be/7oZ_CctyS5Q列表= PLf0swTFhTI8rJvGpOp -…
我还没有完全理解你的疑问,但让我试着回答。如果您正在寻找其他东西,请告诉我。
的 1-为什么建议在“query”子命令的Where子句中使用该参数 强>
SQOOP从RDBMS并行导入数据。您可以使用以下命令指定用于执行导入的地图任务(并行进程) -m 要么 --num-mappers 论点。默认情况下,SQOOP将使用4个地图任务。
-m
--num-mappers
例如,如果您的表的主键列为 order_id 其最小值为0,最大值为1000,并且SQOOP被指示使用4个任务,SQOOP将运行四个进程,每个进程执行表单的SQL语句 SELECT * FROM orders WHERE $CONDITIONS
order_id
SELECT * FROM orders WHERE $CONDITIONS
现在$ CONDITIONS占位符将被替换如下
对于地图任务1: order_id >= 0 and order_id < 250 最终的SQL看起来像
order_id >= 0 and order_id < 250
SELECT * FROM订单WHERE order_id&gt; = 0和order_id&lt; 250
对于地图任务2: order_id >= 250 and order_id < 500 最终的SQL看起来像
order_id >= 250 and order_id < 500
SELECT * FROM订单WHERE order_id&gt; = 250和order_id&lt; 500
对于地图任务3: order_id >= 500 and order_id < 750 最终的SQL看起来像
order_id >= 500 and order_id < 750
SELECT * FROM订单WHERE order_id&gt; = 500和order_id&lt; 750
对于地图任务4: order_id >= 750 and order_id < 1001 最终的SQL看起来像
order_id >= 750 and order_id < 1001
SELECT * FROM订单WHERE order_id&gt; = 750和order_id&lt; 1001
正如您所看到的,$ CONDITIONS是一个占位符,SQOOP将使用生成的值进行搜索和替换。请注意,如果没有map任务大于1,则必须指定$ CONDITIONS。
的 2-如果我们想在“query”子命令而不是“where”子命令中使用的参数中确实有WHERE子句,会发生什么? 强>
您可以在$ CONDITIONS前缀后简单地指定过滤条件 AND 。
AND
例如,如果您只想加载订单金额大于100的订单。
query =“select * from orders join order_items on orders.order_id = order_items.order_item_order_id where \ $ CONDITIONS AND order_amount&gt; 100”
希望这澄清一下!