Я пытаюсь импортировать таблицу из базы данных, присутствующей в MySQL, в HDFS, используя Sqoop. В таблице указаны поля col1, col2, col3, col4 и col5. В них много значений NULL. Количество строк с NULL-значениями - 4265550, а количество строк без значений NULL - 1421851. Я хочу блокировать значения NULL при импорте таблицы в HDFS. Ниже приведен мой код,
sqoop import --connect "jdbc:mysql://quickstart.cloudera:3306/database" --username root --password cloudera --query 'SELECT * FROM table_export WHERE ((col1 IS NOT NULL) OR (col2 IS NOT NULL) OR (col3 IS NOT NULL) OR (col4 IS NOT NULL) OR (col5 IS NOT NULL) AND $CONDITIONS)' --target-dir /user/cloudera/input/table_export --direct -m 1
Но когда я запускаю этот запрос, значения NULL также импортируются. Где я неправ?
Если мне нужно использовать "--where условия",
Случай 1:
--where (col1 IS NOT NULL) OR (col2 IS NOT NULL) OR (col3 IS NOT NULL) OR (col4 IS NOT NULL) OR (col5 IS NOT NULL)
Вариант 2:
--where (col1 != NULL) OR (col2 != NULL) OR (col3 != NULL) OR (col4 != NULL) OR (col5 != NULL)
Какой из них я должен использовать? Пожалуйста, помогите мне. заранее спасибо
Вы можете использовать Case1.
если вы не хотите получить нулевое значение в выходном файле, пожалуйста, измените OR на AND в запрошенном вами запросе.
Вы должны использовать Case1.
--where "(col1 IS NOT NULL) OR (col2 IS NOT NULL) OR (col3 IS NOT NULL) OR (col4 IS NOT NULL) OR (col5 IS NOT NULL)"
потому что результат (col1 != NULL)
не определен. NULL
не может быть равен или не равен другому значению или NULL
. См. Также этот ответ: qaru.site/questions/6197553/...