摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。
场景
通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。在某些比较复杂的业务场景下,我们会在一列中使用复杂的格式,例如数组array, 对象(map),json等格式来表示复杂的数据,例如:
array_column
是数组类型。假如,我们希望统计array_column中所有数值的汇总值,那么我们得遍历每一行的数组中的每一个元素。
unnest语法
- unnest( array) as table_alias(column_name)
表示把array类型展开成多行,行的名称为column_name。 -
unnest(map) as table(key_name, value_name)
表示把map类型展开成多行,key的名称为key_name, value的名称为value_name
- 注意,由于unnest接收的是array或者map类型的数据,如果用户的输入是个字符串类型,那么要先转化成json类型,然后再转化成array类型或map类型,转化的方式是
cast(json_parse(array_column) as array(bigint))
遍历数组每一个元素
使用SQL把array展开成多行:
* | select array_column, a from log, unnest( cast( json_parse(array_column) as array(bigint) ) ) as t(a)
上述SQL把数组展开成多行数字,unnest( cast( json_parse(array_column) as array(bigint) ) ) as t(a)
,unnest语法把数组展开,以t来命名新生成的表,使用a来引用展开后的列。结果如下图:
- 统计数组中的每个元素的和
* | select sum(a) from log, unnest( cast( json_parse(array_column) as array(bigint) ) ) as t(a)
- 按照数组中的每个元素进行group by计算
* | select a, count(1) from log, unnest( cast( json_parse(array_column) as array(bigint) ) ) as t(a) group by a
遍历Map
- 遍历Map中的元素
* | select map_column , a,b from log, unnest( cast( json_parse(map_column) as map(varchar, bigint) ) ) as t(a,b)
- 按照Map的key进行group by 统计
* | select key, sum(value) from log, unnest( cast( json_parse(map_column) as map(varchar, bigint) ) ) as t(key,value) GROUP BY key
格式化显示histogram,numeric_histogram的结果
1.histogram
histogram函数类似于count group by 语法。语法参考文档。
通常我们看到histogram的结果如下:
* | select histogram(method)
是一串json,无法配置视图展示,我们可以用unnest语法,把json展开成多行配置视图,例如:
* | select key , value from( select histogram(method) as his from log) , unnest(his ) as t(key,value)
接下来,可以配置可视化视图:
2. numeric_histogram
numeric_histogram语法是为了把数值列分配到多个桶中去,相当于对数值列进行group by,具体语法参考文档
* | select numeric_histogram(10,Latency)
numeric_histogram的输出如下:
为了格式化展示该结果,我们这样写SQL:
* | select key,value from(select numeric_histogram(10,Latency) as his from log) , unnest(his) as t(key,value)
结果如下:
同时配置柱状图的形式展示:
相关推荐
在处理JSON数据时,我们经常会遇到格式不一致的情况,这主要源于JSON的灵活性,它可以包含对象、数组、字符串、数字、布尔值以及null等多种数据类型。对于格式不确定的JSON字符串,Java提供了多种库来帮助我们解析,...
JSON.stringify(this.arrayFiltering()) 后台 JSONArray array = new JSONArray(tagsItems); for (int i = 0; i < array.length(); i++) { JSONObject obj = array.getJSONObject(i); Map map = JSONUtil....
本文主要讨论了如何将 Hive 中定义的复杂数据类型(如 array<struct<...>>)导入到 ES 中,并解决在此过程中遇到的各种问题。 #### 三、Hive 中的复杂数据类型 Hive 支持多种复杂数据类型,如 array、map 和 struct...
在将Hive中的数据导入到Elasticsearch时,如果Hive表中存在一个表示地理坐标的字段(如`location`),且该字段的类型为`array<double>`,那么直接导入到Elasticsearch后可能会导致该坐标数据无法正常被识别和使用。...
Map解析json中的对象:{“ pluginList”:[{“ name”:“ 1”,“ browser”:“ 1”,“ on”:“ 2”},{“ name“:” 1“,” browser“:” 3“,” on“:” 2“}]}创建表sql:创建表test_json(pluginlist ...
这是gojsonq的主要工作对象,它接受一个JSON字符串或[]byte作为输入,并提供了一系列方法,如`Get()`, `Array()`, `Map()`, `Value()`, `String()`, `Int()`, `Float()`, `Bool()`等,用于从JSON数据中获取不同类型...
- **复杂数据结构转换**:DataFrame 支持处理嵌套数据类型,如 Array 和 Map,可以将这些复杂结构转换为 DataFrame。 **SQL 语句查询 DataFrame** SparkSQL 允许通过 SQL 语句直接查询 DataFrame。在 Spark 3.0 ...
在本文中,我们将深入探讨如何在Java中自定义使用JSON(JavaScript Object Notation)功能,特别是在处理对象转换为JSON字符串的场景。这个简单的实例展示了如何创建一个名为`JsonUtils`的工具类,它包含了将Java...
在Hive中,数据类型是构建数据模型的基础,它们决定了数据如何被存储和处理。Hive作为大数据处理的工具,提供了丰富的数据类型来满足不同场景的需求。本资料“hive数据类型共6页.pdf”可能详细介绍了Hive中的各种...
- 支持嵌套数据类型(struct、array、map)。 - 提供了结构化的数据查询API,使得操作更为方便。 - 性能上优于RDD,原因在于: - 查询计划会经过Spark Catalyst Optimizer的优化,从而减少不必要的计算步骤。 - ...
PHP的字符串处理函数(如explode()、trim())和数组操作函数(如array_map()、array_filter())在此过程中发挥重要作用。 4. 查询接口:创建一个PHP脚本来处理HTTP请求,接收用户的查询参数(如邮编或区号),并...
这个工具在Web开发中十分实用,尤其在数据迁移、数据分析或自动化报告生成等场景下。 首先,我们来了解一下`phpexcelreader`。这是一个开源项目,主要功能是解析Microsoft Office Excel 97-2003(.xls)格式的文件...
JMESa(Java Message Expression Language for SQL Access)是一种用于在Java应用程序中查询和操作数据库的开源工具。它提供了一种简洁、强大的方式来表达SQL查询,使得开发者可以更方便地与数据库进行交互。本文将...
Hive的主要功能在于提供了一个友好的数据处理接口,使得非编程人员也能使用SQL-like语句来处理Hadoop集群中的大规模数据。 **1.3 Hive和普通关系数据库的异同** - **相同点**:都支持SQL-like的查询语言;都可以...
5. **dojo/data**: 这是Dojo的早期数据绑定API,虽然现在已经被dojo/store取代,但在某些老版本的Dojo项目中仍然可见。 6. **dojo/aspect**: 提供面向切面编程(AOP)的功能,可以用于在方法调用前、后或异常时插入...
在SparkSQL中,DataFrame是一个不可变的数据结构,它是由一系列的列组成,每列都有自己的名字和数据类型。DataFrame的底层实现基于Spark的RDD(弹性分布式数据集)和Dataset,这使得DataFrame具有高度优化的执行计划...
在Android和PHP之间进行数据交互时,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因为它的轻量级、易读、易写特性使得它在跨平台通信中扮演了重要角色。本文将深入探讨如何在Android应用中通过...
$type_field_map = array( 1 => User::$field_username, 2 => User::$field_email, 3 => User::$field_phone ); if ($type == 2 && !is_email($value) || $type == 3 && !is_mobilephone($value)) { die_...
- **数据类型**:Scala支持丰富的数据类型,包括基本类型(如Int、Double等)和复合类型(如List、Array等)。 - **控制结构**:提供if-else语句、for循环等基本控制结构。 - **函数式编程**:支持高阶函数、模式...
过期域名查询程序是互联网行业中一个非常实用的工具,尤其对于域名投资者而言,它可以帮助用户发现即将或已经过期的域名,以便抓住投资机会。PHP作为一款广泛应用的服务器端脚本语言,是实现这类程序的理想选择。在...