Sqoop - Импорт - Подкоманда запроса - Параметры в предложении where - PullRequest
0 голосов
/ 04 января 2019

Я хотел бы спросить, может ли кто-нибудь подробно объяснить мне функциональность подкоманды Sqoop "query".

Я собираюсь использовать пример этого видео:

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

query = "select * из заказов присоединиться к order_items на orders.order_id = order_items.order_item_order_id где \ $ CONDITIONS" \

Как мы видим, в условие where добавлен параметр "$ CONDITIONS".

Возможно, я ошибаюсь, но после просмотра видео я понял, что условие будет заменено на "1 = 1", если параметр "$ CONDITIONS" существует, или на "1 = 0", если его нет.

Мои вопросы:

1- Почему рекомендуется использовать параметр в предложении Where подкоманды «query»

2- Что произойдет, если у нас действительно есть предложение WHERE в параметре, который мы хотим использовать в подкоманде «query», а не в подкоманде «where»?

Благодарим вас за помощь,

Дэвид.

1 Ответ

0 голосов
/ 08 января 2019

Я не совсем понял ваши вопросы, но позвольте мне попытаться ответить. Дайте мне знать, если вы ищете что-то еще.

1- Почему рекомендуется использовать параметр в предложении Where подкоманды «query»

SQOOP импортирует данные параллельно из RDBMS. Вы можете указать нет задач карты (параллельный процесс), которые будут использоваться для выполнения импорта, используя аргумент -m или --num-mappers. По умолчанию SQOOP будет использовать 4 задания карты.

Например, если у вас есть таблица со столбцом первичного ключа 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 ордеров, ГДЕ order_id> = 0 и order_id <250 </p>

  2. для задания карты 2: order_id >= 250 and order_id < 500 и окончательный SQL будет выглядеть как

    SELECT * FROM ордеров, ГДЕ order_id> = 250 и order_id <500 </p>

  3. для задания карты 3: order_id >= 500 and order_id < 750 и окончательный SQL будет выглядеть как

    SELECT * FROM заказов, ГДЕ order_id> = 500 и order_id <750 </p>

  4. для задания карты 4: order_id >= 750 and order_id < 1001 и окончательный SQL будет выглядеть как

    SELECT * FROM ордеров, ГДЕ order_id> = 750 и order_id <1001 </p>

Как видите, $ CONDITIONS - это заполнитель, который SQOOP будет искать и заменять сгенерированными значениями. Обратите внимание, что указание $ CONDITIONS является обязательным, если ни одно из заданий на карте не превышает 1.

2- Что произойдет, если у нас действительно есть предложение WHERE в параметре, который мы хотим использовать в подкоманде «query», а не в подкоманде «where»?

Вы можете просто указать свой критерий фильтра после $ CONDITIONS с префиксом AND.

Например, если вы хотите загружать только те заказы, у которых сумма заказа превышает 100.

query = "select * из заказов присоединяется к order_items на orders.order_id = order_items.order_item_order_id где \ $ CONDITIONS AND order_amount> 100"

Надеюсь, это прояснится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...