我正在尝试使用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)
我应该使用哪一个? 请帮帮我。提前致谢
答案 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。