Sqoop - 导入 - 查询子命令 - where 子句中的参数

Sqoop - Import - Query subcommand - Parameters in where clause

我想请问是否有人可以详细解释 Sqoop "query" 子命令的功能。

我将使用此视频的示例:

https://youtu.be/7oZ_CctyS5Q?list=PLf0swTFhTI8rJvGpOp-LujOcpk-Rlz-yE&t=1515

查询="select * from orders join order_items on orders.order_id = order_items.order_item_order_id where $CONDITIONS"\

我们可以看到,在where条件中添加了一个参数"$CONDITIONS"

可能我错了,但看完视频后,我明白了如果参数“$CONDITIONS”存在,条件将被替换为“1=1”,如果不存在,则被替换为“1=0”。

我的问题是:

1- 为什么建议在"query"子命令

的Where子句中使用参数

2- 如果我们想在 "query" 子命令而不是 "where" 子命令中使用的参数中真的有一个 WHERE 子句会怎样?

感谢您对此的帮助,

大卫.

我没有完全理解你的问题,但让我试着回答一下。如果您正在寻找其他东西,请告诉我。

1- 为什么推荐在"query"子命令的Where子句中使用参数

SQOOP 从 RDBMS 并行导入数据。您可以使用 -m--num-mappers 参数指定要用于执行导入的地图任务(并行进程)的数量。默认情况下,SQOOP 将使用 4 个映射任务。

例如,如果您有一个 table,其主键列为 order_id,其最小值为 0,最大值为 1000,并且 SQOOP 被指示使用 4 个任务,SQOOP 将运行 四个进程,每个进程执行 SQL 形式的语句 SELECT * FROM orders WHERE $CONDITIONS

现在 $CONDITIONS 占位符将被替换如下

  1. 地图任务 1:order_id >= 0 and order_id < 250 最后 SQL 看起来像

    SELECT * FROM orders WHERE order_id >= 0 and order_id < 250

  2. 地图任务 2:order_id >= 250 and order_id < 500 最后 SQL 看起来像

    SELECT * FROM orders WHERE order_id >= 250 and order_id < 500

  3. 地图任务 3:order_id >= 500 and order_id < 750 最后 SQL 看起来像

    SELECT * FROM orders WHERE order_id >= 500 and order_id < 750

  4. 地图任务 4:order_id >= 750 and order_id < 1001 最后 SQL 看起来像

    SELECT * FROM orders WHERE order_id >= 750 and order_id < 1001

如您所见,$CONDITIONS 是一个占位符,SQOOP 将搜索该占位符并将其替换为生成的值。请注意,如果地图任务数大于 1,则必须指定 $CONDITIONS。

2- 如果我们想在 "query" 子命令而不是 "where" 子命令中使用的参数中真的有一个 WHERE 子句会怎样?

您可以在以 AND 为前缀的 $CONDITIONS 之后简单地指定您的过滤条件。

例如,如果您只想加载订单金额大于 100 的订单。

query="select * from orders join order_items on orders.order_id = order_items.order_item_order_id where $CONDITIONS AND order_amount > 100"

希望这能说明问题!