Динамически обновлять значения null всех столбцов в Hive

У меня есть набор данных из 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

это отнимает много времени.

2 ответа

  1. Вы можете использовать regexp_replace UDF для выполнения того, что вы хотите.

    regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)
    

    Возвращает строку, полученную в результате замены всех подстрок в
    INITIAL_STRING, которые соответствуют определенному синтаксису регулярного выражения java
    в шаблоне с экземплярами замены. Например,
    regexp_replace(«foobar», «oo|ar», «») возвращает ‘fb.’Обратите внимание, что некоторые
    использование предопределенных классов символов: использование ‘\s ‘ в качестве
    второй аргумент будет соответствовать букве s; ‘\s ‘ необходимо
    совпадение пробелов и т.д.

    Так что в вашем случае вы могли бы использовать что-то вроде:

    SELECT
       regexp_replace(column1, 'null|NA', 'Data_not_available') as column1,
       column2,
       column3,
    FROM table
    
  2. Объединяйтесь и если функция поможет вам сделать это динамически. Как вы можете видеть, вычисленная проекция (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        |
    +---------------------+--+