Sqoop导入命令出错

时间:2017-12-13 05:31:37

标签: mysql hadoop sqoop

我正在尝试使用Sqoop将MySQL中存在的数据库中的表导入HDFS。该表包含字段col1,col2,col3,col4和col5。它们中有很多NULL值。具有NULL值的行数为4265550,没有NULL值的行数为1421851.我想在将表导入HDFS时阻止NULL值。以下是我的代码,

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 conditions”,

情况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)

我应该使用哪一个? 请帮帮我。提前致谢

2 个答案:

答案 0 :(得分:1)

你应该使用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。另见这个答案:https://stackoverflow.com/a/41025180/2700344

答案 1 :(得分:0)

您可以使用Case1。

如果您不希望输出中包含任何空值,请在您粘贴的查询中将OR更改为AND。