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 |