Skip to content

执行sql时,报列不存在或者表不存在怎么办 #2837

Answered by PanternBao
PanternBao asked this question in Q&A
Discussion options

You must be logged in to vote

上述的问题其实都是和dble的表元数据相关,首先得搞明白dble中表元数据的相关概念。
这里我将dble中语句简单的分为两种类型:

  • 可直接下推mysql执行
  • 需要dble解析处理

直接下推

对于此类语句,dble仅仅将sql下推到mysql节点上执行,并且转发mysql的结果

需要dble解析处理

对于此类语句,dble会对sql进行解析,检查sql中涉及表的列是否存在,此时会用到dble中的表元数据信息
对于mysql返回的结果,dble不仅仅是简单的转发,会进行排序,去重等复杂的操作。

如何区分两种类型

通过dble提供的explain来区分

下面的例子是直接下推的sql示例:

mysql> explain select * from global1 t1 left join sharding_2_t1 t2 on t1.id=t2.id where t1.id=2;
+---------------+----------+----------------------------------------------------------------------------------+
| SHARDING_NODE | TYPE | SQL/REF |
+---------------+----------+----------------------------------------------------------------------------------+
| dn1 | BASE SQL | select * from global1 t1…

Replies: 1 comment 1 reply

Comment options

PanternBao
Sep 15, 2021
Collaborator Author

You must be logged in to vote
1 reply
@yanhuqing666
Comment options

Answer selected by yanhuqing666
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants