создать новые столбцы из xml значения в улье - PullRequest
0 голосов
/ 07 мая 2020

У меня есть столбец desc_txt в моей таблице, и его содержимое очень похоже на xml, как показано ниже -

desc_txt 
-----------
<td><strong>Criticality</strong></td><td>High</td></tr><td><strong>Country</strong></td><td>India</td></tr><tr><td><strong>City</strong></td><td>Indore</td>

Требуется создать новую таблицу / представление из этого таблица с дополнительными столбцами, такими как Criticality, Country, City, а также значениями столбцов, например High, India, Indore, соответственно. Как этого добиться в Hive / Impala?

1 Ответ

0 голосов
/ 07 мая 2020

Это можно сделать в два этапа. Я предполагал, что вам нужно тянуть только четыре колонны.

  1. Загрузить данные как есть в таблице. Выложите все в столбик.
  2. Затем используйте это ниже SQL, чтобы разделить данные на несколько столбцов. Я предположил, что 4 столбца, вы можете увеличить в соответствии с вашими требованиями.

with t as ( SELECT rtrim(ltrim( regexp_replace( replace( trim( regexp_replace( regexp_replace("<td><strong>Criticality</strong></td><td>High</td></tr><td><strong>Country</strong></td><td>India</td></tr><tr><td><strong>City</strong></td><td>Indore</td>","</?[^>]*>",",") ,',,',',') ), ' ,', ',' ), '(,){2,}', ','),','),',') str) select split_part(str, ',', 1) as first_col, split_part(str, ',', 2) as second_col, split_part(str, ',', 3) as third_col, split_part(str, ',', 4) as fourth_col from t

Запрос сложный - сначала он заменяет все теги на запятую в них, затем заменяет несколько запятых на одну запятую, затем удаляет запятую с начала и конца строки. Затем функция split разбивает всю строку на основе запятой и создает отдельные столбцы. HTH ...

...