如何在Presto SQL中利用两个同结构数组列生成拆分行
在Presto SQL中按位置拆分两个同结构数组列为多行
你当前用两次独立的CROSS JOIN UNNEST会产生笛卡尔积,因为每次UNNEST都是独立展开所有元素,无法保证对应位置的元素配对。要实现按数组索引位置拆分出对应元素的行,需要把两个数组放在同一个UNNEST语句中,Presto会自动按索引位置将元素一一对应。
正确SQL语句
SELECT Column_a, Column_b FROM a CROSS JOIN UNNEST(Array1, Array2) AS t (Column_a, Column_b)
示例验证
输入表数据:
| Array1 | Array2 |
|---|---|
| [0, 1, 34, 55, 68, 100] | [40, 10, 30, 50, 60, 88] |
执行上述SQL后,输出结果:
| Column_a | Column_b |
|---|---|
| 0 | 40 |
| 1 | 10 |
| 34 | 30 |
| 55 | 50 |
| 68 | 60 |
| 100 | 88 |
补充说明
如果两个数组长度不一致,Presto会以较长数组的长度为准,较短数组的剩余位置会自动填充NULL值。
内容的提问来源于stack exchange,提问作者sonia
相关产品推荐
相关产品推荐

