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 |