从配置单元中的xml值创建新列

7ajki6be  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(299)

我有一个专栏 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 中实现这一点?

fkvaft9z

fkvaft9z1#

这可以分两步完成。我以为你只有四根柱子要拉。
按表中的原样加载数据。把所有的东西都列起来。
然后使用下面的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函数然后基于逗号拆分整个字符串并创建单独的列。嗯。。。

相关问题