日志服务 UNNEST 语法

这篇说说腾讯云日志服务中UNNEST函数的用法,可将ARRAY或MAP展开为多行数据,支持拆分逗号连接的字段进行多行检索分析。 ARRAY展开:将单列数组转换为多行数据,语法为SELECT * FROM UNNEST(ARRAY[…]) AS t(key)。 MAP展开:将键值对展开为两列多行,语法为SELECT * FROM UNNEST(map) AS t(key1, key2)。 日志拆分:结合CROSS JO。

相关产品
日志服务 产品页,含版本规格、价格与购买入口。

UNNEST 可将 ARRAY 或 MAP 展开为多行数据。

一、语法格式

·将 ARRAY 展开为单列的多行数据:

* | SELECT * FROM UNNEST(ARRAY['value1','value2',…]) AS table_name(key_name)

·将 MAP 展开为多行数据:

* | SELECT * FROM UNNEST(map) AS table_name(key1_name, key2_name,…)

二、语法示例

·将 ARRAY 展开为多行数据::

* | SELECT * FROM UNNEST(ARRAY[1,2]) AS t(number)

返回结果:

number
1
2

·将 MAP 展开为多行数据:

* | SELECT * FROM UNNEST( map_from_entries( ARRAY[ ('SQL',1974), ('Java', 1995) ] )) AS t(language, first_appeared_year)

返回结果:

language first_appeared_year
SQL 1974
Java 1995

·将日志内由逗号连接的响应时间字段拆分为多行数据:

·原始日志:

## 第一条原始日志rsp_time: 0.004, 0.002url: /demo/test1## 第二条原始日志rsp_time: 0.006, 0.008url: /demo/test2

·检索分析语句:

* | SELECT time,urlFROM ( SELECT split(rsp_time,',') AS time_array,url) tCROSS JOIN UNNEST(time_array) AS t(time)

·返回结果:

time url
0.004 /demo/test1
0.002 /demo/test1
0.006 /demo/test2
0.008 /demo/test2

·将日志内由逗号连接的响应时间及响应状态字段拆分为多行数据:

·原始日志:

## 第一条原始日志rsp_time: 0.004, 0.002rsp_status: 200, 502url: /demo/test1## 第二条原始日志rsp_time: 0.006, 0.008rsp_status: 500, 404url: /demo/test2

·检索分析语句:

* | SELECT time,status,urlFROM ( SELECT zip(split(rsp_time,','),split(rsp_status,',')) as data_array,url) tCROSS JOIN UNNEST(data_array) AS t(time,status)

·返回结果:

time status url
0.004 200 /demo/test1
0.002 502 /demo/test1
0.006 500 /demo/test2
0.008 404 /demo/test2
赞 (0)
上一篇 4天前
下一篇 4天前