У меня есть таблица dept_nopk
. эта таблица имеет два столбца: department_id
и department_name
, и в этой таблице нет первичного ключа. Я пытаюсь импортировать эту таблицу в HDFS, используя следующую команду SQOOP.
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db"
--username useranem
--password pass
--query "select * from dept_nopk where department_id <> 1000"
--target-dir /user/cloudera/departments
-m 1
но дает следующее сообщение об ошибке:
java.io.IOException: query[select * from dept_nopk where department_id <> 1000] must contain $CONDITION in where clause
Мои вопросы сейчас:
1) Почему я получаю эту ошибку, когда я уже указал, что количество карт просто 1? нужно ли положить $CONDITION
в мой where
пункт?
2) Во второй раз я изменил мой запрос следующим образом
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db"
--username useranem
--password pass
--query "select * from dept_nopk where \$CONDITIONS"
--target-dir /user/cloudera/departments
--where "department_id <> 8000"
-m 1
Я использовал --where
для department_id<>8000
и конкретизированы \$CONDITIONS
. Теперь я не получил никакой ошибки, но в результатах он импортировал строки с department_id =8000
, т. Е. Полностью игнорировал аргумент --where
. Зачем?
3) Я пробовал следовать, и он отлично работал.
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db"
--username useranem
--password pass
--query "select * from dept_nopk where department_id <> 8000 and \$CONDITIONS"
--target-dir /user/cloudera/departments
-m 1
Не могли бы вы объяснить причину ошибок, описанных в пунктах 1) и 2?
Спасибо, ваши ответы полезны. –