侧边栏壁纸
博主头像
Devlive 开源社区博主等级

行动起来,活在当下

  • 累计撰写 122 篇文章
  • 累计创建 32 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Presto Join 查询导致 Internal error

我是管理员哦
2024-01-29 / 0 评论 / 0 点赞 / 9 阅读 / 1610 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-01-29,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

问题描述


通过字面意思我们可以判断出来是系统内部出现了问题?那么该问题是怎么产生的呢?

该问题产生是一般是在使用Presto进行了Join关联查询,导致关联的两个表中的关联字段不一致导致的。

问题复原


比如我有两个数据表,分别是t1表和t2表,他们的表结构分别是:

  • t1表结构
列名类型
c1bigint
c2bigint
  • t2表结构
列名类型
c1bigint
c2varchar (hive中是string)

当我们使用以下两个SQL查询时,会出现不通的结果

select
    t1.c1, t2.c1
from t1 as t1
left join t2 as t2
on t1.c1 = t2.c1
limit 1

在Presto中我们运行以上sql是可以正确拿到查询结果的,但我们换作以下SQL就会出现不同的结果

select
    t1.c2, t2.c2
from t1 as t1
left join t2 as t2
on t1.c2 = t2.c2
limit 1

此时运行SQL就会出现Internal error错误信息

解决思路


单单通过返回Internal error的错误信息我们是无法获取到有效的信息的,但是我们细心观察会发现

在t1表中的c2字段的类型是bigint,然而在t2表中的c2字段是varchar类型的

这样我们会的出一个结论就是由于两个表的字段类型不一致而产生了这个错误,既然知道了错误,解决也就简单了

我们尝试对关联表的关联字段做cast转换,转换为同一类型,修改后的sql如下

select
    t1.c2, t2.c2
from t1 as t1
left join t2 as t2
on cast(t1.c2 as varchar) = cast(t2.c2 as varchar)
limit 1

运行修改后的sql可以正常查询出来有效的结果,为了方便用户,建议写SQL的时候做一下操作(前提是使用Presto引擎查询)

在做关联查询的时候,将双表的关联字段做成cast(xxxx as varchar), 当然转换为其他的类型也可以

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区