Hive动态更新所有列的空值



我有一个75列和411274行的数据集,其中许多条目是nullNA,我想用Data_not_available替换所有这些值,是否有一种方法可以动态地做到这一点,而不是输入每个列名来检查和更新数据?我不想使用类似的代码

SELECT * 
FROM table 
WHERE 1 = CASE 
      WHEN column1 is null OR column2 is null OR ..... OR columnN is null THEN 1
      ELSE 0
      END

这会消耗很多时间。

您可以使用regexp_replace UDF来执行您想要的操作。

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)

返回替换中的所有子字符串所产生的字符串与定义的java正则表达式语法匹配的INITIAL_STRING在PATTERN中使用REPLACEMENT实例。例如,Regexp_replace ("foobar", "oo|ar", ")返回'fb '。请注意在使用预定义的字符类时需要小心:使用's'作为第二个参数将匹配字母s;'s'是必要的匹配空格等

在你的情况下,你可以这样写:

SELECT
   regexp_replace(column1, 'null|NA', 'Data_not_available') as column1,
   column2,
   column3,
FROM table

COALESCE和IF函数将帮助您动态地做到这一点。如您所见,计算投影(select)按您的要求工作。

create table test_3(field String);
insert into test_3 values( null ), ( "NA"), ("A good value");
select * from test_3;
+---------------+--+
| test_3.field  |
+---------------+--+
| NULL          |
| NA            |
| A good value  |
+---------------+--+
select if ( coalesce( field, "NA") = "NA", "Data Not Available", field ) from test_3;
+---------------------+--+
|         _c0         |
+---------------------+--+
| Data Not Available  |
| Data Not Available  |
| A good value        |
+---------------------+--+

相关内容

  • 没有找到相关文章

最新更新