在hive中用xml值创建新的列。

问题描述 投票:0回答:1

我有一栏 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在HiveImpala中如何实现?

sql hive hql impala
1个回答
0
投票

这可以分两步完成。我假设你只有四列要拉。

  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

这个查询很棘手--首先它用逗号替换所有标签,然后用单个逗号替换多个逗号,再从字符串的开头和结尾去掉逗号,然后用分割函数根据逗号分割整个字符串并创建单独的列。HTH...

© www.soinside.com 2019 - 2024. All rights reserved.