阿里云hivesql特殊类型数据处理

特殊类型数据处理
**一、**string类型列字段炸列,如下图,protest字段列为string类型,数据内容中的产品由特定符号分隔,为方便数据使用需要将protest列炸开。
语句:lateral view explode(split( protest ,‘,’ ))
1、利用split将对protest进行分割,返回数组类型,例:select split(“a, b, c”, “,”);–返回[a, b, c]。(https://help.aliyun.com/document_detail/48976.html#section-omq-nbb-wdb)
2、利用explode将列中存储的数组或字典转为多行(https://help.aliyun.com/document_detail/293597.html#section-7rk-9a6-0la)
3、通过Lateral View与UDTF结合使用,将一行数据拆成多行数据,并对拆分后的数据进行聚合。
阿里云hivesql特殊类型数据处理_第1张图片
示例:
select
distinct
*
from (
select
商品id_skuid,
商品名称,
一级类目名称,
二级类目名称,
三级类目第一名称,
三级类目,
机构id,
机构名称,
bd姓名,
product.item_name as pro --进一步提取内容(二、里面的map内容)
from
(–item_info类型array,炸开生成product列
select
product_id ,product_name ,industrial_menu1_name ,industrial_menu2_name ,
item_info[1].item_name ,
item_info ,
product ,------------------
hospital_id ,hospital_name ,hos_bd_name
from soyoung_dw.dws_product_total_topic_d
LATERAL view EXPLODE(item_info ) adTable as product ---------------------------
where dp=current_date()-1 and hos_city_name=‘北京市’ and is_online=1
) as a
) as b
where pro regexp ‘光子|肉毒’

**二、**map类型列字段取值,字段数据如下图,字典类型,取指定键对应的值。
语句:current_page_ext[‘post_id’],提取current_page_ext列post_id对应的值。
current_page_ext.post_id(上面的current_page_ext[‘post_id’]可能写错了,下次验证一下,看看是不是错了)
阿里云hivesql特殊类型数据处理_第2张图片
三、array类型列字段取值,如下图,列表字典,取相应键的值。
语句:item_info[1].item name;取字段item_info的第二个字典的键“item name”对应的值。
在这里插入图片描述
阿里云hivesql特殊类型数据处理_第3张图片

你可能感兴趣的:(数据库,hive)