动态更新配置单元中所有列的空值

a5g8bdjr  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(331)

我有一个由75列和411274行组成的数据集,其中许多条目是 null 或者 NA 我想用 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

这要花很多时间。

b1uwtaje

b1uwtaje1#

您可以使用regexp\u replace udf来执行所需的操作。

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)

返回替换初始字符串中与模式中定义的java正则表达式语法相匹配的所有子字符串所产生的字符串。例如,regexp|u replace(“foobar”,“oo | ar”,“”)返回'fb'。请注意,在使用预定义字符类时需要注意:使用'\s'作为第二个参数将匹配字母s;'\s'是匹配空格等所必需的。
所以在你的案例中,你可以使用如下的方法:

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

k7fdbhmy2#

coalesce和if函数将帮助您动态地执行它。如您所见,计算投影(选择)按您所需工作。

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        |
+---------------------+--+

相关问题