presto报错exception:java.util.concurrent.ExecutionException: java.sql.SQLException: Query failed (#20230529_063701_03996_847se): line 202:9: Column 'array_v' cannot be resolved
时间: 2024-02-05 10:04:11 浏览: 28
根据错误信息来看,问题出在了 `UNNEST` 这个函数上,Presto 无法解析 `array_v` 这个列名。这很可能是因为 `array_v` 这个列是在子查询中定义的,而在主查询中却无法访问。
一种解决方法是将子查询中对 `array_v` 的访问移动到主查询中。可以先将子查询中的 `SPLIT` 函数提升到主查询中,然后再对其结果进行 `UNNEST` 函数的操作。可以尝试一下下面的语句:
```
SELECT
a.pick_date,
a.pick_region_nm,
a.pick_park_nm,
b.type1,
b.type2,
b.type3,
b.type4,
a.target_1,
a.target_2,
a.target_3
FROM (
SELECT
pick_date,
pick_region_nm,
pick_park_nm,
split(array_concat, ',') as array_values
FROM tmp_03
) a
CROSS JOIN UNNEST(a.array_values) AS array_v
LEFT JOIN tmp.pick_analysis_map b ON split(array_v, '#')[1] = b.type
```
这里将子查询中的 `SPLIT` 函数提升到了主查询中,并将其结果作为一个数组 `array_values` 返回。然后在 `CROSS JOIN` 中对 `array_values` 进行了 `UNNEST` 操作,得到了一个列名为 `array_v` 的新列。最后在 `LEFT JOIN` 中通过 `split(array_v, '#')[1]` 来匹配 `b.type`。