SQL中复杂结构体解析取值和对常用复杂函数的解释

一、SQL字段中的复杂结构体

如举例字段event_params类型为:

array<struct<key:string,string_value:string,int_value:bigint,double_value:double>>

event_params字段值为:

在这里插入图片描述

如果想取其中的“key”:

select event_params[0].key from tables;

二、常用复杂函数的解释

1、transform():将一个数组转换为另一个数组。

该函数会对数组中的每个元素应用func函数,并返回一个新的数组,其中只包含满足func函数条件的元素。

语法:

transform(expr, func)

参数:

  • expr表示一个数组表达式。
  • func表示一个函数表达式。

示例:获取event_params字段的key

select transform(event_params, param->param.key) as event_params_key
from dc_database."data_mobile_quality"
limit 10

在这里插入图片描述

2、map():将一组键值对映射到一个新的键值对集合。

语法:

MAP(key_expression, value_expression [, key_expression, value_expression]...)

参数:

  • key_expression:表示键的表达式。
  • value_expression:表示值的表达式。

示例:返回event_params字段中key、string_value组成的map

select map(
		transform(event_params, param->param.key),
		transform(event_params, param->param.string_value)
	) as event_params_map
from dc_database."data_mobile_quality"
limit 10

![在这里插入图片描述](https://img-blog.csdnimg.cn/064faf032e3f4771a23769e12417dc75.pn

3、map_filter(expr, func)函数是一种用于处理数组的函数。

该函数会对数组中的每个元素应用func函数,并返回一个新的数组,其中只包含满足func函数条件的元素。

语法:

map_filter(expr, func)

参数:

  • expr表示一个数组表达式。
  • func表示一个函数表达式。

示例:返回event_params字段中key、string_value组成的map,并且map的key只能为‘total’,‘avail’。

select map_filter(
		map(
			transform(event_params, param->param.key),
			transform(event_params, param->param.string_value)
		),
		(k, v)->k in ('total', 'avail')
	) kv
from dc_database.data_mobile_behavior
where any_match(event_params, param->param.key = 'total')
      and any_match(event_params, param->param.key = 'avail')
limit 10

在这里插入图片描述
这里为什么要加where中的条件?

where any_match(event_params, param->param.key = 'total')
      and any_match(event_params, param->param.key = 'avail')

该条件表示event_params不能为空,并且必须同时包含key为total、avail的元素。见下一个函数。

如果不加该条件返回的结果是这样的:
在这里插入图片描述

4、boolean any_match(array , function<T, boolean> )

判断Array数组a中是否存在元素满足predicate。

返回值说明

  • 如果ARRAY数组a中存在一个或多个元素满足predicate条件,返回结果为True。
  • 如果ARRAY数组a中没有元素满足predicate条件或ARRAY数组为空,返回结果为False。
  • 如果ARRAY数组a中存在元素为NULL,且其他元素都不满足predicate条件,返回结果为NULL。

示例

where any_match(event_params, param->param.key = 'screen')
and any_match(event_params, param->param.key = 'charge')
and any_match(event_params, param->param.key = 'duration')

该条件event_params不能为空,且key必须同时有’screen’、‘charge’、‘duration’。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Senye_ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值