Power BI Desktop 以MySQL驱动连接到 TiDB 报错

【 TiDB 使用环境】
服务端:TiDB集群,客户端:Windows + Power BI Desktop

【概述】 场景 + 问题概述
Power BI Desktop 通过 MySQL类型驱动连接到TiDB,试图导入数据库表元数据建模时发生报错,报错信息如下:
从提供程序读取数据时出错:“未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。”
经对比测试,相同的表结构在MySQL数据库中,Power BI Desktop可以正常导入数据库表元数据,不会报错。

【业务影响】
集团战略数据分析前端工具Power BI,无法对接到TiDB

【TiDB 版本】
5.1.1

2赞

报的是外键约束功能不正常,实际上,tidb支持外键语法但是实际上目前还没有实现这个功能。

2赞

或许Power BI在尝试检查外键约束时遇到问题,TiDB既然无法支持外键,能否在数据库属性中明确表示禁用外键约束?

2赞

没听说过禁用外键的开关

https://docs.pingcap.com/zh/tidb/stable/constraints#外键约束
关于tidb的外键,看一下这个。

2赞

多谢老师答复!由此看来,TiDB在语法和元数据层面上是支持外键的,只是不做相关数据有效性检查而已。那么本问题帖中的报错应该就不是由于TiDB对外键支持的局限性导致的。

2赞

可以看看 tidb-server 日志中,记录的错误信息是啥

2赞

刚查了tidb server 没有关于这个的错误日志,如果使用odbc连接

sql会多拼出一点。

2赞

改成odbc对应的版本之后可以了,但是原生的power bi 的mysql连接还是不可以。

2赞

好滴,解决了就好,类似问题以前没遇到过

2赞

这个问题我们尝试查下根因,看看能不能得到解决并产出一个源码阅读的文章。帮助大家解决自己问题的同时也能对 TiDB 相应模块的具体代码有所了解。

2赞

能否帮忙开启 tidb-server 的 general log,抓取一下相关检查的 sql?
开启 general log(server 级)的方法:set @@tidb_general_log=1;

2赞

这个已经查到不兼容的 SQL 和问题了,正在安排伙伴打算在排查问题的同时产出一篇带着问题读源码的文章。

3赞

我们试着复现了一下问题,把排查过程记录了一下:https://pingcap.feishu.cn/docs/doccnFtqUc8V6lEX5TRAGOuRScf 。可以使用最新的5.2.1版本,应该已经解决了问题。