我有一个专栏 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条答案
按热度按时间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函数然后基于逗号拆分整个字符串并创建单独的列。嗯。。。