presto报错concat('拣货件量#',coalesce(total_num,''),'#',1,'#',0.0001)
时间: 2024-01-11 22:04:12 浏览: 129
这个报错可能是因为你在使用concat函数时,其中一个参数的数据类型与其他参数不匹配,导致无法进行拼接操作。建议检查一下你使用的total_num字段是否为字符串类型,如果不是,需要使用cast函数将其转换为字符串类型再进行拼接操作。例如:
concat('拣货件量#',coalesce(cast(total_num as varchar),''),'#',1,'#',0.0001)
相关问题
presto修改select pick_date,pick_region_nm,pick_park_nm, concat( concat('拣货件量#',coalesce(cast(total_num as varchar),''),'#',1,'#',0.0001), concat(',同片区拣货量占比#',coalesce(cast(same_region_num as varchar),''),'#',coalesce(cast(total_num as varchar),''),'#',100), concat(',跨片区拣货量占比#',coalesce(cast(diff_region_num as varchar),''),'#',coalesce(cast(total_num as varchar),''),'#',100), concat(',任务效率#',coalesce(cast(total_num as varchar),''),'#',coalesce(cast(total_time as varchar),''),'#',1))
根据报错信息,你需要修改 concat 函数的参数列表,以保证参数类型与函数预期的参数类型匹配。具体来说,你需要将 varchar 类型的参数转换为 char 类型的参数。
下面是修改后的代码:
```
SELECT
pick_date,
pick_region_nm,
pick_park_nm,
concat(
concat('拣货件量#',coalesce(cast(total_num as varchar),''),'#',1,'#',0.0001),
concat(',同片区拣货量占比#',coalesce(cast(same_region_num as varchar),''),'#',coalesce(cast(total_num as varchar),''),'#',100),
concat(',跨片区拣货量占比#',coalesce(cast(diff_region_num as varchar),''),'#',coalesce(cast(total_num as varchar),''),'#',100),
concat(',任务效率#',coalesce(cast(total_num as varchar),''),'#',coalesce(cast(total_time as varchar),''),'#',1)
)
FROM your_table_name;
```
在这个查询语句中,我们使用了 coalesce 函数来处理空值,同时使用了 cast 函数将 varchar 类型的参数转换为 char 类型的参数,以保证参数类型与函数预期的参数类型匹配。
presto报错exception:java.util.concurrent.ExecutionException: java.sql.SQLException: Query failed (#20230529_063701_03996_847se): line 202:9: Column 'array_v' cannot be resolved
根据错误信息来看,问题出在了 `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`。
阅读全文